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

initdb

initdb — 建立一個新的 PostgreSQL 資料庫叢集

概要

initdb [選項...] [ --pgdata | -D ] 目錄

描述

initdb 建立一個新的 PostgreSQL 資料庫叢集

建立資料庫叢集包括建立叢集資料所在的 目錄,生成共享的目錄表(屬於整個叢集而非任何特定資料庫的表),以及建立 postgrestemplate1template0 資料庫。 postgres 資料庫是一個預設資料庫,供使用者、實用程式和第三方應用程式使用。 template1template0 用作可以通過後續 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 中本地使用者使用的預設身份驗證方法(hostlocal 行)。有關有效值的概述,請參閱 第 20.1 節

initdb 將使用指定的身份驗證方法預填充 pg_hba.conf 條目,用於非複製和複製連線。

除非您信任系統上的所有本地使用者,否則不要使用 trusttrust 是預設設定,方便安裝。

--auth-host=authmethod #

此選項指定 pg_hba.confhost 行)中透過 TCP/IP 連線進行的本地使用者身份驗證方法。

--auth-local=authmethod #

此選項指定 pg_hba.conflocal 行)中透過 Unix 域套接字連線進行的本地使用者身份驗證方法。

-D directory
--pgdata=directory #

此選項指定資料庫叢集的儲存目錄。這是 initdb 所需的唯一資訊,但您可以透過設定 PGDATA 環境變數來避免輸入,這很方便,因為資料庫伺服器(postgres)稍後可以透過相同的變數找到資料目錄。

-E encoding
--encoding=encoding #

選擇模板資料庫的編碼。這也將是您以後建立的任何資料庫的預設編碼,除非您稍後覆蓋它。 PostgreSQL 伺服器支援的字元集在 第 23.3.1 節 中有描述。

預設情況下,模板資料庫的編碼源自區域設定。如果指定了 --no-locale(或者等效地,如果區域設定是 CPOSIX),則對於 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-providerbuiltin,則必須指定 --locale--builtin-locale 並設定為 CC.UTF-8PG_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_walpg_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 的常規操作。通常,此選項對於在將 fsyncoff 更改為 on 後確保可靠恢復很有用。

其他選項

-V
--version #

列印 initdb 版本並退出。

-?
--help #

顯示有關 initdb 命令列引數的幫助資訊並退出。

環境變數

PGDATA #

指定資料庫叢集的儲存目錄;可以使用 -D 選項覆蓋。

PG_COLOR #

指定是否在診斷訊息中使用顏色。可能的值為 alwaysautonever

TZ #

指定建立的資料庫叢集的預設時區。值應為完整的時區名稱(請參閱 第 8.5.3 節)。

註釋

initdb 也可以透過 pg_ctl initdb 呼叫。

提交更正

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