BKIの例PostgreSQLは、テーブルや関数のようなデータベースオブジェクトの存在の有無と特性を追跡するために、多くの異なるシステムカタログを使用します。物理的な観点ではシステムカタログとユーザーテーブルの間に違いはありませんが、バックエンドのCコードはそれぞれのカタログの構造と特性を把握しており、直接カタログを低レベルで操作することができます。カタログの構造を思いつきで変更しようとするのはおすすめできません。そのことによって、Cのコードに組み込まれているカタログの行のレイアウトに関する前提を壊してしまうことになるからです。いえ、カタログの構造はメジャーバージョン間で変更されることがあります。カタログの構造は、ソースツリーのsrc/include/catalog/ディレクトリの中の特殊な形式のCヘッダーファイルに宣言されています。個々のカタログに対応して、カタログと同じ名前のヘッダーファイルが存在し(たとえば、pg_classに対してpg_class.hというように)、カタログが持つ一連のカラムやOIDのような基本的な特性を定義しています。そのほか、カタログ構造を定義している重要なファイルとしては、すべてのシステムカタログに存在するインデックスの構造を定義するindexing.hや、カタログによっては必要としているTOASTテーブルの構造を定義するtoasting.hなどがあります。SQLコマンドを実行可能な状態にまでシステムを持っていくために、多くのカタログはinitdbの「bootstrap」フェーズで読み込まなければならない初期データを持っています。(たとえば、pg_class.hは、他のシステムカタログとインデックス同様、自分自身のエントリを含んでいなければなりません。この初期データも、src/include/catalog/ディレクトリに格納されているデータファイル中に編集可能な形式で保存されています。pg_proc.datは、pg_procカタログに挿入されるべき初期の行を記述しています。バックエンドインタフェース)ファイルを読み込みます。このモードで使用されるpostgres.bkiは、genbki.plというPerlスクリプトを使って、PostgreSQLディストリビューションを構築する過程で前述のヘッダーとデータファイルから作成されます。postgres.bkiはPostgreSQLの特定のリリースに固有のものですが、プラットフォームからは独立しており、インストレーションツリーのshareサブディレクトリにインストールされます。genbki.plは、他にも各々のカタログで使用する、たとえばpg_classのためのpg_class_d.hのような派生ファイルを生成します。このファイルには自動生成されたマクロ定義が含まれているほか、他のマクロとenum宣言も含まれており、特定のカタログを読み込むクライアントCコードに役立ちます。ほとんどのPostgres開発者は直接BKIファイルのことを気にかける必要はありませんが、バックエンドに些細ではない機能を追加する際にはカタログヘッダーファイル、あるいはまた初期データファイルの変更が必要になるでしょう。この章の残りの部分でそれについての情報をお届けします。網羅性のために、BKIファイルのフォーマットも説明します。システムカタログの宣言ルール。