はじめに
にゃーん。趣味でポスグレをやっている者だ。
この記事はPostgreSQL 16 全部ぬこ Advent Calendar 2022 23日目の記事です。
今回はCommitfest個々の項目ではなく、システムカタログ/システムビュー全体の変更状態を調べてみました。
なお、あくまでも開発途中のものなので、beta版リリースのときには、これよりも大きく変わっている可能性は高いです。
比較対象
今回の記事は、以下のバージョン間のシステムカタログ・ビューの変更状態を調査しました。
- PostgreSQL 15.1
- PostgreSQL-devel
- 12/20朝時点の版
- commit eb60eb08a95eb531f3f2a459c1b623c5ac37ecd3
- CATALOG_VERSION_NO 202212191
テーブル/ビュー単位での比較
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_tables
とpg_analyze_all_tables
の定義済みロールが消えてました。
PostgreSQL 15との差分で出てきたのは、pg_maintain
の行のみ。
よく考えてみれば、昨日公開した記事(allow granting CLUSTER, REFRESH MATERIALIZED VIEW, and REINDEXで、pg_roles
の内容を表示しているのに気づかなかった・・・。
たぶん、VACUUMもANALYZEもpg_maintain
ロールで対応するのだろうなあ。
(Commitfestのタイトルからだけではわからんよ・・・)
おわりに
ということで、今回はシステムカタログ全般の変更を簡単に調べてみました。
まだ、開発途中なのでこのあたりは今後、いろいろ変わるとは思いますが・・・