2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不再支援的版本: 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 / 7.1

第 68 章 系統目錄宣告與初始內容

PostgreSQL 使用許多不同的系統目錄來跟蹤資料庫物件(如表和函式)的存在和屬性。從物理上講,系統目錄和普通使用者表之間沒有區別,但是後端 C 程式碼知道每個目錄的結構和屬性,並且可以對其進行低級別直接操作。因此,例如,不建議嘗試動態更改目錄的結構;這會破壞 C 程式碼中關於目錄行佈局的假設。但是,目錄的結構可能在主版本之間發生變化。

目錄的結構宣告在原始碼樹的 src/include/catalog/ 目錄中以特殊格式的 C 標頭檔案中。對於每個目錄,都有一個以目錄命名的標頭檔案(例如,pg_classpg_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檔案格式。

提交更正

如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。