★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

第74章 システムカタログの宣言と初期内容

目次

74.1. システムカタログの宣言ルール
74.2. システムカタログ初期データ
74.2.1. データファイル形式
74.2.2. OIDの割当
74.2.3. OID参照検索
74.2.4. 配列型の自動作成
74.2.5. データファイルの編集方法
74.3. BKIファイル形式
74.4. BKIコマンド
74.5. BKIファイルのブートストラップの構成
74.6. BKIの例

PostgreSQLは、テーブルや関数のようなデータベースオブジェクトの存在の有無と特性を追跡するために、多くの異なるシステムカタログを使用します。 物理的な観点ではシステムカタログとユーザーテーブルの間に違いはありませんが、バックエンドのCコードはそれぞれのカタログの構造と特性を把握しており、直接カタログを低レベルで操作することができます。 ですから、たとえばカタログの構造を思いつきで変更しようとするのはおすすめできません。そのことによって、Cのコードに組み込まれているカタログの行のレイアウトに関する前提を壊してしまうことになるからです。 とはいえ、カタログの構造はメジャーバージョン間で変更されることがあります。

カタログの構造は、ソースツリーのsrc/include/catalog/ディレクトリの中の特殊な形式のCヘッダファイルに宣言されています。 個々のカタログに対応して、カタログと同じ名前のヘッダファイルが存在し(たとえば、pg_classに対してpg_class.hというように)、カタログが持つ一連の列やOIDのような基本的な特性を定義しています。

SQLコマンドを実行可能な状態にまでシステムを持っていくために、多くのカタログはinitdbbootstrapフェーズで読み込まなければならない初期データを持っています。 (たとえば、pg_class.hは、他のシステムカタログとインデックス同様、自分自身のエントリを含んでいなければなりません。) この初期データも、src/include/catalog/ディレクトリに格納されているデータファイル中に編集可能な形式で保存されています。 たとえば、pg_proc.datは、pg_procカタログに挿入されるべき初期の行を記述しています。

カタログファイルを作り初期データをそこにロードするために、ブートストラップモードで実行中のバックエンドは、コマンドと初期データを含むBKI(Backend Interface: バックエンドインタフェース)ファイルを読み込みます。 このモードで使用されるpostgres.bkiは、genbki.plというPerlスクリプトを使って、PostgreSQLディストリビューションを構築する過程で前述のヘッダーとデータファイルから作成されます。 postgres.bkiPostgreSQLの特定のリリースに固有のものですが、プラットフォームからは独立しており、インストレーションツリーのshareサブディレクトリにインストールされます。

genbki.plは、他にも各々のカタログで使用する、たとえばpg_classのためのpg_class_d.hのような派生ファイルを生成します。 このファイルには自動生成されたマクロ定義が含まれているほか、他のマクロとenum宣言も含まれており、特定のカタログを読み込むクライアントCコードに役立ちます。

ほとんどのPostgreSQL開発者は直接BKIファイルのことを気にかける必要はありませんが、バックエンドに些細ではない機能を追加する際にはカタログヘッダファイル、あるいはまた初期データファイルの変更が必要になるでしょう。 この章の残りの部分でそれについての情報をお届けします。 また網羅性のために、BKIファイルのフォーマットも説明します。