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