目錄
PostgreSQL 使用許多不同的系統目錄來跟蹤資料庫物件(如表和函式)的存在和屬性。從物理上講,系統目錄和普通使用者表之間沒有區別,但是後端 C 程式碼知道每個目錄的結構和屬性,並且可以對其進行低級別直接操作。因此,例如,不建議嘗試動態更改目錄的結構;這會破壞 C 程式碼中關於目錄行佈局的假設。但是,目錄的結構可能在主版本之間發生變化。
目錄的結構宣告在原始碼樹的 src/include/catalog/
目錄中以特殊格式的 C 標頭檔案中。對於每個目錄,都有一個以目錄命名的標頭檔案(例如,pg_class
的 pg_class.h
),它定義了該目錄的列集以及其他一些基本屬性,例如其 OID。
許多目錄都包含在 initdb 的“引導”階段必須載入到其中的初始資料,以使系統能夠執行 SQL 命令。(例如,pg_class.h
必須包含它自身的條目,以及其他每個系統目錄和索引的條目。)此初始資料以可編輯的形式儲存在也儲存在 src/include/catalog/
目錄中的資料檔案中。例如,pg_proc.dat
描述了所有必須插入 pg_proc
目錄的初始行。
為了建立目錄檔案並將此初始資料載入到其中,以引導模式執行的後端會讀取一個BKI(後端介面)檔案,其中包含命令和初始資料。在此模式下使用的 postgres.bki
檔案是在構建 PostgreSQL 發行版時,由名為 genbki.pl
的 Perl 指令碼根據上述標頭檔案和資料檔案準備的。雖然它特定於某個 PostgreSQL 版本,但 postgres.bki
是平臺獨立的,並且安裝在安裝樹的 share
子目錄中。
genbki.pl
還為每個目錄生成一個派生標頭檔案,例如 pg_class
目錄的 pg_class_d.h
。此檔案包含自動生成的宏定義,並且可能包含其他宏、列舉宣告等,這些對於讀取特定目錄的客戶端 C 程式碼可能很有用。
大多數 PostgreSQL 開發人員不需要直接關注BKI檔案,但幾乎任何後端中的非平凡功能新增都需要修改目錄標頭檔案和/或初始資料檔案。本章的其餘部分將提供有關此方面的資訊,併為完整起見描述BKI檔案格式。
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。