postgresql使用文檔之一 初始化數據存儲區

17.2. 建立一個數據庫集羣(Database Cluster)html

  在你能作任何事情以前,你必須在磁盤上初始化一塊存儲空間。咱們稱這爲一個數據庫集羣(database cluster). 一個Database cluster是一批被一個運行着數據庫服務的示例所管理的數據庫.初始化之後,一個database cluster將會包含一個名爲 postgres的數據庫,它是一個被一些工具、用戶和第三方應用使用的默認數據庫。數據庫服務器自己不須要 postgres ,可是不少外部的程序會假設它存在。另一個在每個cluster初始化時建立的數據庫叫作 template1. 就像它的名字所暗示,它會被用來做爲一個建立後續數據庫所使用的模板;它不該該被實際工做所使用(參考21章獲取關於在一個集羣中建立新的數據庫的信息)sql

在文件系統術語中,一個database cluster是單個的目錄,全部的數據會被存儲在這個目錄下。咱們稱這個目錄爲數據目錄(data directory)或數據區域(data area).選擇在哪一個目錄下存儲您的數據徹底取決於您,沒有默認目錄,儘管諸如/usr/local/pgsql/data或/var/lib/pgsql/data之類的目錄做爲數據目錄是比較流行的。初始化一個database cluster,使用initdb命令,它是和PostgreSQL一塊兒安裝的。您指望的的database cluster文件系統目錄使用選項 -D標註,如例:數據庫

 $initdb -D /usr/local/pgsql/data緩存

注意在您登陸PostgreSQL用戶帳戶以前必須先執行這個命令,這在上一節已經描述過了。(提示:您能夠設置環境變量PGDATA來替換-D選項安全

可供選擇的,您也能夠經過pg_ctl程序像下面這樣運行 initdb服務器

 $pg_ctl -D /usr/local/pgsql/data initdb網絡

若是您使用pg_ctl啓動和中止服務器(查看17.3節)將會更加直觀。這樣的話在管理數據庫服務器示例時pg_ctl將會是惟一的一個命令。app

initdb將會嘗試建立你指定的一個不存在的目錄。頗有可能您沒有權限建立(若是您尊隨咱們的建議並建立了一個非特權帳戶)。在這種狀況下,您應該建立這個目錄(好比用root權限),而後改變這個目錄的擁有者(owner)爲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將不會運行。ide

因爲數據目錄包含了全部存儲在數據庫裏的數據,所以應該有對未受權的訪問的安全機制。initdb收回了全部其餘用戶的訪問權限,除了PostgreSQL用戶.

然而,儘管這個目錄下的內容是安全的,默認的客戶受權設置容許任何本地用戶鏈接數據庫甚至成爲數據庫超級用戶(管理員)。若是您不信任本地的其餘用戶,咱們建議您使用任意一種initdb的選項-W,--pwprompt或--pwfile來分配給數據庫超級用戶的密碼。而且,指定-A md5或-A password,這樣默認的 trust 受權模式不起做用;或者在運行initdb後,第一次啓動您的數據庫服務器以前修改生成的pg_hda.conf文件。(其餘的合理的途徑包括使用peer受權或文件系統權限來限制連接。查看19章獲取更多信息)

initdb同時爲database cluster初始化默認的locale,通常而言,它只是使用本地locale設置並將其應用到初始化的數據庫中。爲數據庫指定一個其餘的locale是可能的;更多的信息能夠在22.1節找到。默認的應用在特定的database cluster上的排序(sort order)是被initdb設置的,而且若是您建立了使用不一樣的排序的新的數據庫,除非您刪除重建它,在template數據庫中使用的order是不會改變的。使用其餘的locale而不是使用C或POSIX會對性能產生影響。所以在第一次正確的選擇選項是很重要的。

initdb同時爲database cluster設置默認的字符集和encoding。通常而言應該選擇匹配locale設置。更多細節查看22.3節

17.2.1 網絡文件系統

不少安裝在網絡文件系統建立database cluster。有些直接用NFS,或者使用內部使用NFS的NAS來完成。PostgreSQL並不是特定於NFS文件系統,意味着它使用NFS的方式和本地鏈接的驅動(DAS,直接鏈接的存儲器)徹底一致。若是客戶端和服務端的NFS實現未遵循標準的語意(semantics),這可能會產生可靠性問題(查看http://www.time-travellers.org/shane/papers/NFS_considered_harmful.html).具體而言,延時(異步)寫入NFS服務器會產生可靠性問題;若是能夠,儘可能同步掛載(不用緩存)

相關文章
相關標籤/搜索