LoginSignup
2
0

More than 1 year has passed since last update.

システムカタログ・ビューの変更

Last updated at Posted at 2022-12-22

はじめに

にゃーん。趣味でポスグレをやっている者だ。

この記事はPostgreSQL 16 全部ぬこ Advent Calendar 2022 23日目の記事です。

今回はCommitfest個々の項目ではなく、システムカタログ/システムビュー全体の変更状態を調べてみました。
なお、あくまでも開発途中のものなので、beta版リリースのときには、これよりも大きく変わっている可能性は高いです。

比較対象

今回の記事は、以下のバージョン間のシステムカタログ・ビューの変更状態を調査しました。

テーブル/ビュー単位での比較

diffとってみましたが、現時点ではテーブル/ビュー単位での変更は現時点ではないようです。

列への変更

次にテーブル・ビューの列単位での変更を見てみます。

システムカタログ

列の変更があったシステムカタログは以下の3つです。

テーブル名 内容
pg_auth_members ロール間のメンバシップ関係を管理
pg_db_role_setting ロールとデータベースの組み合わせ毎に、設定される実行時設定変数を管理
pg_subscription 論理レプリケーションのサブスクリプションの管理

pg_auth_members

列名 更新種別 データ型 内容
inherit_option 追加 bool メンバーが付与されたロールの権限を自動的に継承するかどうかのフラグ
oid 追加 oid Row identifier
set_option 追加 bool メンバーが付与されたロールにSET ROLEできるかどうかのフラグ

今回、アドベントカレンダー期間内にきちんと調べきれなかったCommitfest項目(allowing for control over SET ROLE)に関係しているんだろうか・・・?

pg_db_role_setting

列名 更新種別 データ型 内容
setuser 追加 bool[] setconfigの各設定に対応するUSER SETフラグ

これは、PostgreSQL 16 全部ぬこ Advent Calendar 2022 18日目の記事(PG16:Add USER SET parameter values for pg_db_role_setting)に関連する列の追加ですね。

pg_subscription

列名 更新種別 データ型 内容
suborigin 追加 text (DeepL翻訳)
originの値は、noneまたはanyのいずれかにする必要があります。デフォルトは any です。
none の場合、サブスクリプションはパブリッシャーに、オリジンを持たない変更のみを送信するように要求します。any の場合、パブリッシャーはオリジンに関係なく変更を送信します。

うーむ、これはよくわかりません。
Commitfestの項目Add common function ReplicationOriginNameに関係しているのかなあ・・・(これは全然調べてなかった)。

システムビュー

列の変更があったシステムカタログは以下の9つです。
なお、pg_stat_tables, pg_stat_indexes は実質上同じ変更です。

テーブル名 内容
pg_hba_file_rules クライアント認証の設定ファイルpg_hba.confの内容の要約
pg_ident_file_mappings ident認証の設定ファイルpg_ident.confの内容の要約
pg_prepared_statements 現在のセッションで利用可能な準備済み文の一覧
pg_stat_all_indexes インデックスへのアクセスに関する統計情報
pg_stat_all_tables テーブルへのアクセスに関する統計情報
pg_stat_sys_indexes インデックスへのアクセスに関する統計情報
(システムテーブルのインデックス)
pg_stat_sys_tables テーブルへのアクセスに関する統計情報
(システムテーブル)
pg_stat_user_indexes インデックスへのアクセスに関する統計情報
(ユーザテーブルのインデックス)
pg_stat_user_tables テーブルへのアクセスに関する統計情報
(ユーザテーブル)

pg_hba_file_rules

列名 更新種別 データ型 内容
file_name 追加 text そのルールを含むファイル名
rule_number 追加 int4 このルールの番号(有効な場合)、それ以外は NULL。
認証時にマッチするまで各ルールが適用される順序を示す。

これは、PostgreSQL 16 全部ぬこ Advent Calendar 2022 3日目の記事(PG16:Allow file inclusion in pg_hba and pg_ident file)に対応するものかな。

pg_ident_file_mappings

列名 更新種別 データ型 内容
file_name 追加 text そのマップを含むファイル名
map_number 追加 int4 このマップの番号(有効な場合は優先順位)、そうでない場合は NULL

きちんと調査して書いてないけど、これも、PostgreSQL 16 全部ぬこ Advent Calendar 2022 3日目の記事(PG16:Allow file inclusion in pg_hba and pg_ident file)に対応するものかな。

pg_prepared_statements

列名 更新種別 データ型 内容
result_types 追加 regtype[] (DeepL翻訳)
準備された文が返す列の型は、regtype の配列の形式となります。この配列の要素に対応する OID は、regtype 値を oid にキャストすることで取得できます。準備された文が結果を提供しない場合(例えば、DML文)、このフィールドはNULLになります。

うーん、これは何の改造項目に対応したものなんだろう。
TopicがMonitoring & Controlの項目には、それっぽいものがないような気がしているのだけど・・・。

篠田さんからの指摘によると、以下のCommitfest項目とのことでした。うーむ、Commitfest 2022-07の項目だったのか・・・
Add result_types column to pg_prepared_statements view

pg_stat_*_indexes

列名 更新種別 データ型 内容
last_idx_scan 追加 timestamptz 最後にIndexScanされたタイムスタンプ

これと一つ下の節にあるpg_stat_*_tablesへの列追加は、PostgreSQL 16 全部ぬこ Advent Calendar 2022 7日目の記事(PG16:Tracking last scan time)に対応するものですね。

pg_stat_*_tables

列名 更新種別 データ型 内容
last_idx_scan 追加 timestamptz 最後にIndexScanされたタイムスタンプ
last_seq_scan 追加 timestamptz 最後にSeqScanされたタイムスタンプ

行の変更(一部だけ)

pg_roles

定義済みロールなど、予め登録されているシステムカタログの行の違いも、少し見てみようと思って、手始めにpg_rolesの行差分を取ってみましたが、なんといつの間にかpg_vacuum_all_tablespg_analyze_all_tablesの定義済みロールが消えてました。
PostgreSQL 15との差分で出てきたのは、pg_maintainの行のみ。

よく考えてみれば、昨日公開した記事(allow granting CLUSTER, REFRESH MATERIALIZED VIEW, and REINDEXで、pg_rolesの内容を表示しているのに気づかなかった・・・。
たぶん、VACUUMもANALYZEもpg_maintainロールで対応するのだろうなあ。
(Commitfestのタイトルからだけではわからんよ・・・)

おわりに

ということで、今回はシステムカタログ全般の変更を簡単に調べてみました。
まだ、開発途中なのでこのあたりは今後、いろいろ変わるとは思いますが・・・

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0