initdb — 建立一個新的 PostgreSQL 資料庫叢集
initdb [選項...] [ --pgdata | -D ] 目錄
initdb 建立一個新的 PostgreSQL 資料庫叢集。
建立資料庫叢集包括建立叢集資料所在的 目錄,生成共享的目錄表(屬於整個叢集而非任何特定資料庫的表),以及建立 postgres、template1 和 template0 資料庫。 postgres 資料庫是一個預設資料庫,供使用者、實用程式和第三方應用程式使用。 template1 和 template0 用作可以通過後續 CREATE DATABASE 命令複製的源資料庫。 template0 永遠不應被修改,但您可以向 template1 新增物件,這些物件預設情況下將複製到以後建立的資料庫中。有關更多詳細資訊,請參閱 第 22.3 節。
雖然 initdb 會嘗試建立指定的資料目錄,但如果所需資料目錄的父目錄歸 root 所有,它可能沒有許可權。要在這種設定中進行初始化,請以 root 身份建立一個空資料目錄,然後使用 chown 將該目錄的所有權分配給資料庫使用者帳戶,然後使用 su 切換到資料庫使用者以執行 initdb。
initdb 必須以將擁有伺服器程序的使用者身份執行,因為伺服器需要訪問 initdb 建立的檔案和目錄。由於伺服器不能以 root 身份執行,因此您也不能以 root 身份執行 initdb。(實際上它會拒絕這樣做。)
出於安全原因,預設情況下,由 initdb 建立的新叢集只能由叢集所有者訪問。 --allow-group-access 選項允許與叢集所有者同組的任何使用者讀取叢集中的檔案。這對於作為非特權使用者執行備份很有用。
initdb 初始化資料庫叢集的預設區域設定和字元集編碼。這些也可以在建立每個資料庫時單獨設定。 initdb 為模板資料庫確定這些設定,這些設定將作為所有其他資料庫的預設值。
預設情況下,initdb 使用 libc 區域設定提供程式(請參閱 第 23.1.4 節)。 libc 區域設定提供程式從環境中獲取區域設定,並從區域設定中確定編碼。
要為叢集選擇不同的區域設定,請使用 --locale 選項。還有單獨的選項 --lc-* 和 --icu-locale(見下文)來設定各個區域設定類別的.*值。請注意,不同區域設定類別的不一致設定可能導致無意義的結果,因此應謹慎使用。
或者,initdb 可以透過指定 --locale-provider=icu 來使用 ICU 庫提供區域設定服務。伺服器必須使用 ICU 支援進行構建。要選擇適用的特定 ICU 區域設定 ID,請使用 --icu-locale 選項。請注意,出於實現原因並支援舊程式碼,當使用 ICU 區域設定提供程式時,initdb 仍將選擇並初始化 libc 區域設定。
當 initdb執行時,它會打印出它選擇的區域設定。如果您有複雜的配置要求或指定了多個選項,建議檢查結果是否符合預期。
有關區域設定的更多詳細資訊,請參閱 第 23.1 節。
要更改預設編碼,請使用 --encoding。更多詳細資訊,請參閱 第 23.3 節。
-A authmethod--auth=authmethod #此選項指定 pg_hba.conf 中本地使用者使用的預設身份驗證方法(host 和 local 行)。有關有效值的概述,請參閱 第 20.1 節。
initdb 將使用指定的身份驗證方法預填充 pg_hba.conf 條目,用於非複製和複製連線。
除非您信任系統上的所有本地使用者,否則不要使用 trust。 trust 是預設設定,方便安裝。
--auth-host=authmethod #此選項指定 pg_hba.conf(host 行)中透過 TCP/IP 連線進行的本地使用者身份驗證方法。
--auth-local=authmethod #此選項指定 pg_hba.conf(local 行)中透過 Unix 域套接字連線進行的本地使用者身份驗證方法。
-D directory--pgdata=directory #此選項指定資料庫叢集的儲存目錄。這是 initdb 所需的唯一資訊,但您可以透過設定 PGDATA 環境變數來避免輸入,這很方便,因為資料庫伺服器(postgres)稍後可以透過相同的變數找到資料目錄。
-E encoding--encoding=encoding #選擇模板資料庫的編碼。這也將是您以後建立的任何資料庫的預設編碼,除非您稍後覆蓋它。 PostgreSQL 伺服器支援的字元集在 第 23.3.1 節 中有描述。
預設情況下,模板資料庫的編碼源自區域設定。如果指定了 --no-locale(或者等效地,如果區域設定是 C 或 POSIX),則對於 ICU 提供程式,預設值為 UTF8;對於 libc 提供程式,預設值為 SQL_ASCII。
-g--allow-group-access #允許與叢集所有者同組的使用者讀取 initdb 建立的所有叢集檔案。此選項在 Windows 上將被忽略,因為它不支援POSIX-風格的組許可權。
--icu-locale=locale #當使用 ICU 提供程式時,指定 ICU 區域設定。區域設定支援在 第 23.1 節 中描述。
--icu-rules=rules #指定附加的排序規則以自定義預設排序規則的行為。這僅支援 ICU。
-k--data-checksums #對資料頁使用校驗和,以幫助檢測 I/O 系統可能導致的靜默損壞。此選項預設啟用;使用 --no-data-checksums 停用校驗和。
啟用校驗和可能會帶來輕微的效能損失。如果設定,將為所有資料庫中的所有物件計算校驗和。所有校驗和失敗都將在 pg_stat_database 檢視中報告。有關詳細資訊,請參閱 第 28.2 節。
--locale=locale #設定資料庫叢集的預設區域設定。如果未指定此選項,則區域設定將從 initdb 執行的環境繼承。區域設定支援在 第 23.1 節 中描述。
如果 --locale-provider 是 builtin,則必須指定 --locale 或 --builtin-locale 並設定為 C、C.UTF-8 或 PG_UNICODE_FAST。
--lc-collate=locale--lc-ctype=locale--lc-messages=locale--lc-monetary=locale--lc-numeric=locale--lc-time=locale #類似於 --locale,但僅設定指定類別的區域設定。
--no-locale #等同於 --locale=C。
--builtin-locale=locale #當使用內建提供程式時,指定區域設定名稱。區域設定支援在 第 23.1 節 中描述。
--locale-provider={builtin|libc|icu} #此選項為新叢集中建立的資料庫設定區域設定提供程式。在以後建立新資料庫時,可以在 CREATE DATABASE 命令中覆蓋它。預設值為 libc(請參閱 第 23.1.4 節)。
--no-data-checksums #不啟用資料校驗和。
--pwfile=filename #使 initdb 從檔案中讀取引導超級使用者的密碼。檔案的第一行將被用作密碼。
-T config--text-search-config=config #設定預設的文字搜尋配置。有關更多資訊,請參閱 default_text_search_config。
-U username--username=username #設定 引導超級使用者的使用者名稱。預設情況下,這是執行 initdb 的作業系統使用者的名稱。
-W--pwprompt #使 initdb 提示輸入引導超級使用者的密碼。如果您不打算使用密碼身份驗證,則此項不重要。否則,在設定密碼之前,您將無法使用密碼身份驗證。
-X directory--waldir=directory #此選項指定寫預日誌(WAL)應儲存的目錄。
--wal-segsize=size #設定 WAL 段大小(以兆位元組為單位)。這是 WAL 日誌中每個單獨檔案的大小。預設大小為 16 兆位元組。值必須是 1 到 1024(兆位元組)之間的 2 的冪。此選項只能在初始化期間設定,之後不能更改。
調整此大小以控制 WAL 日誌分發或歸檔的粒度可能很有用。此外,在 WAL 卷高的資料庫中,每個目錄中 WAL 檔案的數量過多可能會成為效能和管理問題。增加 WAL 檔案大小將減少 WAL 檔案的數量。
其他不太常用的選項也可用
-c name=value--set name=value #在 initdb 期間強制將伺服器引數 name 設定為 value,並將其設定寫入生成的 postgresql.conf 檔案,以便在將來的伺服器執行時生效。此選項可以多次使用以設定多個引數。當環境導致伺服器無法使用預設引數啟動時,此選項主要很有用。
-d--debug #列印引導後端(bootstrap backend)的除錯輸出以及一些其他對公眾不太重要的訊息。引導後端是 initdb 用於建立目錄表的程式。此選項會產生大量極其枯燥的輸出。
--discard-caches #使用 debug_discard_caches=1 選項執行引導後端。這需要很長時間,僅對深度除錯有用。
-L directory #指定 initdb 在何處查詢其輸入檔案以初始化資料庫叢集。這通常不是必需的。如果您需要顯式指定其位置,系統會告知您。
-n--no-clean #預設情況下,當 initdb 確定由於錯誤而無法完全建立資料庫叢集時,它會刪除在發現無法完成工作之前可能建立的任何檔案。此選項會抑制清理操作,因此對除錯很有用。
-N--no-sync #預設情況下,initdb 會等待所有檔案安全地寫入磁碟。此選項導致 initdb 在不等待的情況下返回,這樣更快,但這意味著後續的作業系統崩潰可能會導致資料目錄損壞。通常,此選項對於測試很有用,但不應用於建立生產環境。
--no-sync-data-files #預設情況下,initdb 會將所有資料庫檔案安全地寫入磁碟。此選項指示 initdb 跳過同步單個數據庫目錄中的所有檔案、資料庫目錄本身以及表空間目錄,即 base 子目錄及其所有其他表空間目錄中的所有內容。其他檔案(例如 pg_wal 和 pg_xact 中的檔案)仍將同步,除非還指定了 --no-sync 選項。
請注意,如果 --no-sync-data-files 與 --sync-method=syncfs 結合使用,則上述部分或全部檔案和目錄將被同步,因為 syncfs 會處理整個檔案系統。
此選項主要供工具內部使用,這些工具會單獨確保跳過的檔案被同步到磁碟。
--no-instructions #預設情況下,initdb 會在其輸出末尾寫入有關如何啟動叢集的說明。此選項會導致這些說明被省略。這主要供包裝 initdb 以實現特定於平臺的行為的工具使用,在這些情況下,這些說明很可能是不正確的。
-s--show #顯示內部設定並退出,不執行其他任何操作。這可用於除錯 initdb 安裝。
--sync-method=method #當設定為 fsync(這是預設值)時,initdb 將遞迴開啟並同步資料目錄中的所有檔案。檔案搜尋將遵循 WAL 目錄和每個配置的表空間的符號連結。
在 Linux 上,還可以使用 syncfs 來要求作業系統同步包含資料目錄、WAL 檔案和每個表空間的整個檔案系統。有關使用 syncfs 時需要注意的注意事項,請參閱 recovery_init_sync_method。
當使用 --no-sync 時,此選項無效。
-S--sync-only #安全地將所有資料庫檔案寫入磁碟並退出。這不會執行任何 initdb 的常規操作。通常,此選項對於在將 fsync 從 off 更改為 on 後確保可靠恢復很有用。
其他選項
initdb 也可以透過 pg_ctl initdb 呼叫。
如果您在文件中發現任何不正確之處、與您對特定功能的實際體驗不符之處或需要進一步澄清之處,請使用 此表單 報告文件問題。