(本文章原始記錄於 2010 年 5 月 24 日)

******* initdb 初始化資料庫檔案 *******

initdb 程式用來建立 PostgreSQL Cluster 檔案,
包括基本資料庫及一些設定檔,並初始化相關的設定。
可以建立很多個 PostgreSQL Cluster,並在啟動 postgres 時設定 Listen 不同的 port,
如此一來就可以在一台機器上開啟多個 Server 的 daemon 提供服務。

使用語法如下:
C:\> initdb [OPTION] … [DATADIR]

其中常用的 option 有以下幾個:

-A AUTH 指定認證方式,一般有 trust、password、md5 及其他編碼認證可用:

  • trust 為完全信任,任誰都不用輸入密碼即可登入;
  • password 為要輸入密碼登入,密碼為一般純文字普通編碼;
  • md5 一樣要輸入密碼登入,但是密碼會先經過 MD5 編碼後再記錄;

其他則是以特殊編碼方式登入,請參考說明文件 Chapter 19。
若在此無特別設定 -A,則使用預設的 trust 認證;initdb 完成後,
可以在 PGDATA 目錄下修改 pg_hba.conf 檔案來變更認證方式

-D DATADIR 指定 PostgreSQL Cluster 檔案所在位置 PGDATA (必要),
即使作業系統是 Windows,路徑分隔符號也可以使用「/」,
例如 C:/postgresql8.4.31/data
若未指定 -D,則必須將 DATADIR 指定為最後一個參數
-E ENCODING 指定建立資料庫時的預設編碼(encoding),使用 UTF8 為 UNICODE
-U USER 設定建立 PostgreSQL Cluster 的 superuser,若無指定此選項,
則預設 superuser 為作業系統的使用者名稱
-W 設定 superuser 的密碼,若設定 -A password 的話必須加上此選項,否則會產生錯誤
-d 顯示建立 Cluster 時的詳細資訊( debbug ),由於資訊相當冗長,
建立所花時間又相當久,故不建議使用

若未設定 -D 選項或最後一個參數並未指定檔案放置位置,則會取用環境變數 PGDATA 的值,若連環境變數 PGDATA 都未設定,則會出現錯誤。

範例:
C:\> initdb -E BIG5 -D C:/postgresql8.4.31/data
設定 PostgreSQL Cluster 預設編碼為 BIG5,預設 superuser 及基本資料庫所有人為系統使用者,並將檔案放置於 C:/postgresql8.4.31/data 目錄中,而且不用密碼就可以操作資料庫系統。

C:\> initdb -E UTF8 -U tester -D C:/postgresql8.4.31/data
設定 PostgreSQL Cluster 預設編碼為 UTF8,設定 superuser 及基本資料庫所有人為 tester,並將檔案放置於 C:/postgresql8.4.31/data 目錄中,而且不用密碼就可以操作資料庫系統。

C:\> initdb -A password -E UTF8 -U admin -W -D C:/postgresql8.4.31/data
設定 PostgreSQL Cluster 預設編碼為 UTF8,設定 superuser 及基本資料庫所有人為 admin,並將檔案放置於 C:/postgresql8.4.31/data 目錄中,強制必須輸入密碼才可以操作資料庫系統,並在建立檔案的過程中詢問所要設定的密碼為何。

建立 PGDATA 後,該目錄的存取控制權屬於執行 initdb 時的作業系統使用者,
而非建立檔案時所設定的 superuser,若作業系統登入成其他使用者,可能無法啟動 Server。

關於 initdb 的用法可以參考 C:\> initdb --help