| PostgreSQL 8.0.0 中文文件(轉譯自 PostgreSQL 中國 製作的簡體中文版本) | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 16. 伺服器執行時環境 | Fast Forward | Next |
在您做任何事情之前,您必須初始化磁盤上的資料庫的儲存區間。 我們管它叫資料庫集群。(SQL 使用術語目錄集群。) 一個資料庫集群是一系列資料庫的集合,這些資料庫可以透過單個資料庫伺服器的實例管理。 在初始化後,一個資料庫集群將包含一個叫template1的資料庫。 正如其名一樣,這個資料庫將作為隨後建立的資料庫的模版;在實際工作中不應該使用這個庫。 (參閱 Chapter 18 獲取有關建立資料庫的訊息。)
用文件系統的術語來說,一個資料庫集群將是一個目錄,所有資料都將存放在這個目錄中。 我們把它稱做資料目錄或資料區。 在哪裡存放資料完全是您的選擇,我們沒有預設值,儘管 /usr/local/pgsql/data 或 /var/lib/pgsql/data 這樣的目錄很常用。 要初始化一個資料庫集群,可以使用命令 initdb, 這個命令與 PostgreSQL 一起安裝。您可以用-D 標識您為您的資料庫系統選擇的文件系統位置,例如:
$ initdb -D /usr/local/pgsql/data
請注意您必須以PostgreSQL用戶的身份來執行這條命令, 這一點我們在前面一節描述過。
如果您聲明的路徑還不存在,initdb 將試圖建立它。 您很有可能缺少做這些事情的權限(如果您按照我們的建議建立了一個非特權帳戶的話)。 這時,您可以自己建立該目錄(以root身份)然後把該目錄的所有權交給PostgreSQL用戶或者賦與她寫權限。 下面是可能有效的方法:
root# mkdir /usr/local/pgsql/data root# chown postgres /usr/local/pgsql/data root# su postgres postgres$ initdb -D /usr/local/pgsql/data
如果資料目錄看起來像已經初始化過了,那麼 initdb 會拒絕執行。
因為資料目錄包含所有儲存在資料庫裡的資料,所以出於安全考慮,這個目錄不能給任何非授權用戶訪問。因此, initdb 禁止除 PostgreSQL 用戶帳戶以外的任何用戶訪問這個目錄。
不過,因為目錄的內容是安全的,所以預設的客戶端認證設置允許任意局部用戶連線到資料庫甚至成為超級用戶。 如果您不信任您的本地用戶,我們建議您使用 initdb 的選項 -W, --pwprompt 或者 --pwfile 給超級用戶賦予一個指令。 還有,聲明 -A md5 或者 -A password,這樣就不會使用預設的 trust。 或者在 initdb 之後, 在您第一次啟動伺服器之前修改 pg_hba.conf,讓它使用 md5 或者 password,而不是 trust 認證方式。 (另外一些合理的方法包括 ident 認證或者用文件系統權限限止連線。 參閱 Chapter 19 獲取更多細節。)
initdb 同時也為資料庫集群初始化預設區域。 通常,它將只是使用環境中的區域設置並且把它們應用與初始化的資料庫。 我們可以為資料庫聲明不同的區域;有關這些的更多訊息可以在 Section 20.1 中找到。 在特定資料庫集群裡的排序順序是由 initdb 設置的, 而且以後就不能更改了,除非轉儲所有資料,重新執行initdb, 並重新裝載資料。使用非 C 或者 POSIX 的區域還會有性能影響。 因此,第一次就選擇正確很重要。
initdb 還為資料庫集群設置預設的字元集編碼。 通常這個應該選擇與區域匹配。詳見 Section 20.2。