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
呼叫。
如果您在文件中發現任何不正確之處、與您對特定功能的實際體驗不符之處或需要進一步澄清之處,請使用 此表單 報告文件問題。