initdb — 建立新的 PostgreSQL 資料庫叢集
initdb
[option
...] [ --pgdata
| -D
] directory
initdb
建立新的 PostgreSQL 資料庫叢集。
建立資料庫叢集包括建立叢集資料所在的目錄、產生共用的目錄表格(屬於整個叢集而不是任何特定資料庫的表格),以及建立 postgres
、template1
和 template0
資料庫。postgres
資料庫是一個預設資料庫,供使用者、公用程式和第三方應用程式使用。template1
和 template0
則作為來源資料庫,供稍後的 CREATE DATABASE
指令複製。 template0
絕不應修改,但您可以將物件新增到 template1
,預設情況下,該物件將複製到稍後建立的資料庫中。有關更多詳細資料,請參閱 第 22.3 節。
雖然 initdb
會嘗試建立指定的資料目錄,但如果所需資料目錄的父目錄由 root 擁有,則它可能沒有權限。 若要在這樣的設定中初始化,請以 root 身分建立一個空的資料目錄,然後使用 chown
將該目錄的所有權指派給資料庫使用者帳戶,然後使用 su
成為資料庫使用者以執行 initdb
。
initdb
必須以將擁有伺服器程序的使用者身分執行,因為伺服器需要存取 initdb
建立的檔案和目錄。 由於伺服器無法以 root 身分執行,因此您也不得將 initdb
以 root 身分執行。(事實上,它會拒絕這樣做。)
基於安全考量,預設情況下,initdb
建立的新叢集只能由叢集擁有者存取。--allow-group-access
選項允許與叢集擁有者位於同一群組中的任何使用者讀取叢集中的檔案。 這對於以非特權使用者身分執行備份很有用。
initdb
會初始化資料庫叢集的預設語言環境和字元集編碼。 這些也可以在建立時為每個資料庫單獨設定。 initdb
會確定範本資料庫的那些設定,這些範本資料庫將作為所有其他資料庫的預設值。
預設情況下,initdb
使用語言環境供應器 libc
(請參閱第 23.1.4 節)。 libc
語言環境供應器從環境中取得語言環境設定,並從語言環境設定中確定編碼。
若要為叢集選擇不同的語言環境,請使用選項 --locale
。 還有個別選項 --lc-*
和 --icu-locale
(請參閱下文)可以為個別語言環境類別設定值。 請注意,不同語言環境類別的不一致設定可能會產生無意義的結果,因此應謹慎使用。
或者,initdb
可以使用 ICU 程式庫來提供語言環境服務,方法是指定 --locale-provider=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
#此選項指定透過 TCP/IP 連線在本機使用者使用的驗證方法,該方法用於 pg_hba.conf
(host
行)。
--auth-local=authmethod
#這個選項指定了透過 Unix 網域 Socket 連線的本機使用者驗證方法,用於 pg_hba.conf
檔案中(local
行)。
-D directory
--pgdata=directory
#這個選項指定資料庫叢集應該儲存的目錄。這是 initdb
唯一需要的資訊,但您可以透過設定 PGDATA
環境變數來避免寫入,這樣做很方便,因為資料庫伺服器 (postgres
) 之後也可以透過相同的變數找到資料目錄。
-E encoding
--encoding=encoding
#選擇範本資料庫的編碼。這也會成為您稍後建立的任何資料庫的預設編碼,除非您當時覆寫它。PostgreSQL 伺服器支援的字元集在 第 23.3.1 節中有描述。
預設情況下,範本資料庫編碼源自於 locale。如果指定了 --no-locale
(或等效地,如果 locale 是 C
或 POSIX
),則 ICU 提供者的預設值為 UTF8
,而 libc
提供者的預設值為 SQL_ASCII
。
-g
--allow-group-access
#允許與叢集擁有者在同一個群組中的使用者讀取由 initdb
建立的所有叢集檔案。 在 Windows 上,此選項會被忽略,因為它不支援POSIX風格的群組權限。
--icu-locale=locale
#指定使用 ICU 提供者時的 ICU locale。Locale 支援在 第 23.1 節中有描述。
--icu-rules=rules
#指定額外的定序規則以自訂預設定序的行為。這僅適用於 ICU。
-k
--data-checksums
#在資料頁面上使用校驗和,以幫助檢測 I/O 系統的損壞,否則這些損壞將不會被發現。 啟用校驗和可能會導致明顯的效能損失。 如果設定,則會針對所有資料庫中的所有物件計算校驗和。 所有校驗和失敗都會在 pg_stat_database
檢視表中報告。 詳情請參閱 第 28.2 節。
--locale=locale
#設定資料庫叢集的預設 locale。如果未指定此選項,則 locale 會繼承自執行 initdb
的環境。Locale 支援在 第 23.1 節中有描述。
如果 --locale-provider
是 builtin
,則必須指定 --locale
或 --builtin-locale
並將其設定為 C
或 C.UTF-8
。
--lc-collate=locale
--lc-ctype=locale
--lc-messages=locale
--lc-monetary=locale
--lc-numeric=locale
--lc-time=locale
#與 --locale
類似,但僅在指定的類別中設定 locale。
--no-locale
#等同於 --locale=C
。
--builtin-locale=locale
#指定使用 builtin 提供者時的 locale 名稱。Locale 支援在 第 23.1 節中有描述。
--locale-provider={builtin
|libc
|icu
}
#這個選項設定新叢集中建立的資料庫的 locale 提供者。 在隨後建立新資料庫時,可以在 CREATE DATABASE
命令中覆寫它。 預設值為 libc
(請參閱 第 23.1.4 節)。
--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-segsize=size
#設定 WAL 片段大小,單位為 MB。這是 WAL 日誌中每個獨立檔案的大小。預設大小為 16 MB。該值必須是介於 1 到 1024 之間的 2 的冪次方 (MB)。此選項只能在初始化期間設定,之後無法變更。
調整此大小對於控制 WAL 日誌傳輸或封存的粒度可能很有用。此外,在高 WAL 容量的資料庫中,每個目錄中大量的 WAL 檔案可能會成為效能和管理問題。增加 WAL 檔案大小將會減少 WAL 檔案的數量。
還有其他較不常用的選項可用
-c name
=value
--set name
=value
#強制在 initdb
期間將伺服器參數 name
設定為 value
,並將該設定安裝到產生的 postgresql.conf
檔案中,以便在未來的伺服器執行期間應用。可以多次給定此選項以設定多個參數。當環境導致伺服器根本無法使用預設參數啟動時,這主要很有用。
-d
--debug
#印出引導後端的偵錯輸出,以及一些對於一般大眾較不感興趣的其他訊息。引導後端是 initdb
用於建立目錄表的程式。此選項會產生大量的極其乏味的輸出。
--discard-caches
#以 debug_discard_caches=1
選項執行引導後端。這需要很長時間,僅適用於深度偵錯。
-L directory
#指定 initdb
應在何處找到其輸入檔案以初始化資料庫叢集。通常這是不必要的。如果需要明確指定其位置,將會告知您。
-n
--no-clean
#預設情況下,當 initdb
確定某個錯誤阻止其完全建立資料庫叢集時,它會移除在發現無法完成工作之前可能已建立的任何檔案。此選項會抑制清理,因此對於偵錯很有用。
-N
--no-sync
#預設情況下,initdb
將等待所有檔案安全地寫入磁碟。此選項會導致 initdb
不等待而返回,這樣速度更快,但這表示隨後的作業系統崩潰可能會使資料目錄損毀。通常,此選項對於測試很有用,但不應在建立生產安裝時使用。
--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
之後,確保可靠的恢復很有用。
其他選項
也可以透過 pg_ctl initdb
呼叫 initdb
。
如果您在文件中發現任何不正確、與您特定功能的使用經驗不符或需要進一步澄清的地方,請使用此表單來回報文件問題。