はじめに
にゃーん。
前回は、PostgreSQL 10とPostgreSQL 11の設定パラメータの差分を探ってみた。
今回は、PostgreSQL 10とPostgreSQL 11のシステムカタログの差分を見てみる。PostgreSQLではDDL=システムカタログと言ってもいいくらい密接な関係がある。なので、システムカタログの差分を見ることによって、どんなDDLの追加や変更があったのかを、想像することができたりする。また、PostgreSQLの挙動を監視するための稼動統計情報ビューの差分を見ることで、PostgreSQL監視用のスクリプトへの影響も事前に調査することもできたりする。
じゃあ早速見てみよう。
テーブル/ビュー単位の変更
なんと、現時点ではテーブル/ビュー単位での変更差分はなかった。
ハッシュパーティションがPostgreSQL 11で入ったけど、既存のパーティション用システムカタログの枠で管理できるってことなんかな。あと、新規の稼動統計情報ビューもなさげか。
列単位の変更
列の追加や変更はそれなりに多い。
表/ビュー名 | 変更箇所 | メモ |
---|---|---|
pg_aggregate | aggfinalmodify, aggmfinalmodifyの追加 |
遷移状態の値の保持(読み込みのみ、書き込みあり)に関するフラグかな? CREATE AGGREGATEに影響があるんだろうか。 |
pg_attribute | atthasmissing, attmissingvalの追加 | 後で列が追加されたときのDEFAULT値の情報。フラグ(atthasmissing)とその値(attmissingval)なのかな。 もしかすると高速ALTER TABLE機能が入ったってことなんだろうか(実テーブルへの変更がかからない |
pg_class | relhaspkeyの削除 relrewriteの追加 |
従来、主キー存在チェックにはrelhaspkeyを使ってたけど、11からはpg_indexを使いなさいよ、とリリースノートには書いてある。 relrewriteについては、「 表リライトを必要とするDDL操作中に新しいリレーションが書き込まれる場合、これには元のリレーションのOIDが含まれる。内部的な(一時的な?)情報らしいので、普段は0しか入らないっぽい? |
pg_constraint | conparentidの追加 conincludingの追加 pg_constraint_conparentid_indexインデックス(btree)の追加 |
conparentidはパーティション表の制約に関する情報っぽい。 conincludingは、制約付き列と同じインデックスに含まれる非制約列のリスト・・・どういうときに使うのか、まだよくわかってない。 |
pg_index | indnkeyattsの追加 | 索引のキー列の数、らしい。今までなかったんだー。 |
pg_partitioned_table | partdefidの追加 | デフォルトパーティションに該当するpg_classの値。そっか、デフォルトパーティションって11からだっけか。 |
pg_proc | proisagg, proiswindowの削除 prokindの追加 |
いままで集約関数やウインドウ関数かどうかをフラグで管理していたけど、プロシージャの追加も含めて、11からはcharで種別をもつようになったっぽい。 通常関数はf、プロシージャはp、集約関数はa、ウィンドウ関数はw |
pg_publication | pubtruncateの追加 | ロジカルレプリケーションの対象にTRUNCATEが追加されたから、そのフラグかな。 |
pg_stat_wal_receiver | sender_hostの追加 sender_portの追加 |
レプリケーション送信元のホスト名とポート番号が参照できるようになったみたい。 |
おわりに
これは現時点(beta1)時点の調査なので、正式版リリース時点では多少変わっている可能性はあるので、今後のbetaリリースタイミングで、再調査は必要かもしれない。
あと、システムカタログの差分から、PostgreSQL 11の新機能や変更内容の一部が読み取れるのはいつもながらに面白いなあ。システムカタログの差分自体は、表/ビュー単位の追加ならともかく、列の変更だけだとリリースノートに掲載されないこともあるので、こういう調査はそれなりに大事だと思ってはいる。