?
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
initdb [option...] --pgdata | -D directory
initdb創(chuàng)建一個(gè)新的PostgreSQL數(shù)據(jù)庫(kù)集群。 一個(gè)數(shù)據(jù)庫(kù)集群是由單個(gè)服務(wù)器實(shí)例管理的多個(gè)數(shù)據(jù)庫(kù)的集合。
創(chuàng)建數(shù)據(jù)庫(kù)系統(tǒng)包括創(chuàng)建數(shù)據(jù)庫(kù)數(shù)據(jù)的宿主目錄,生成共享的系統(tǒng)表(不屬于任何特定數(shù)據(jù)庫(kù)的表) 和創(chuàng)建template1和postgres數(shù)據(jù)庫(kù)。當(dāng)你以后再創(chuàng)建 一個(gè)新數(shù)據(jù)庫(kù)時(shí),template1數(shù)據(jù)庫(kù)里所有內(nèi)容都會(huì)拷貝過(guò)來(lái)。因此,任何在 template1里面安裝的東西都自動(dòng)拷貝到之后創(chuàng)建的數(shù)據(jù)庫(kù)中。 postgres數(shù)據(jù)庫(kù)是一個(gè)缺省數(shù)據(jù)庫(kù),用于給用戶、工具、第三方應(yīng)用提供缺 省數(shù)據(jù)庫(kù)。
盡管initdb會(huì)嘗試創(chuàng)建相應(yīng)的數(shù)據(jù)目錄,但經(jīng)常會(huì)沒(méi)有權(quán)限做這件事。 因?yàn)樗獎(jiǎng)?chuàng)建目錄的父目錄通常被root所擁有。要初始化這種設(shè)置,用root創(chuàng)建一個(gè)空數(shù)據(jù)目錄, 然后用chown把該目錄的所有權(quán)交給數(shù)據(jù)庫(kù)用戶帳號(hào),然后su 成數(shù)據(jù)庫(kù)用戶,最后以數(shù)據(jù)庫(kù)用戶身份運(yùn)行initdb。
initdb必須以運(yùn)行數(shù)據(jù)庫(kù)服務(wù)器的用戶身份運(yùn)行,因?yàn)榉?wù)器需要訪問(wèn) initdb創(chuàng)建的目錄和文件。因?yàn)榉?wù)器通常是以非root身份運(yùn)行的,因 此一般也就不以 root 用戶運(yùn)行initdb。(事實(shí)上initdb 將拒絕你以root用戶運(yùn)行它。)
initdb 初始化數(shù)據(jù)庫(kù)集群的默認(rèn)語(yǔ)言環(huán)境和字符集編碼。 字符集編碼,排序順序(LC_COLLATE)和字符集類(LC_CTYPE,如: 大寫(xiě)字母、小寫(xiě)字母和數(shù)字)可以在創(chuàng)建時(shí)單獨(dú)對(duì)一個(gè)數(shù)據(jù)庫(kù)設(shè)置。initdb 決定對(duì)template1數(shù)據(jù)庫(kù)的設(shè)置,這將作為所有其他數(shù)據(jù)庫(kù)的默認(rèn)設(shè)置。
更改默認(rèn)排序順序或字符集類,要使用--lc-collate和--lc-ctype 選項(xiàng)。排序命令除了C或者POSIX也有性能損失。由于這些原因, 在運(yùn)行initdb時(shí)選擇正確的語(yǔ)言環(huán)境是很重要的。
剩下的locale類可以稍后在服務(wù)器啟動(dòng)時(shí)被改變。您也可以使用--locale 來(lái)為所有的locale類設(shè)置默認(rèn),包括排序順序和字符集類。所有的服務(wù)器locale值 (lc_*)可以通過(guò)SHOW ALL被顯示。 更多詳細(xì)信息敬請(qǐng)關(guān)注Section 22.1
為了改變默認(rèn)編碼,要使用--encoding。 更多詳細(xì)信息敬請(qǐng)關(guān)注Section 22.2。
這個(gè)選項(xiàng)聲明本地用戶在pg_hba.conf里面使用的認(rèn)證方法。除非你相信 所有本地用戶,否則不要使用trust(缺省)。
這個(gè)選項(xiàng)聲明數(shù)據(jù)庫(kù)集群應(yīng)該存放在哪個(gè)目錄。這是initdb需要的 唯一信息,但是你可以通過(guò)設(shè)置PGDATA環(huán)境變量來(lái)避免鍵入,這樣做可 能方便一些,因?yàn)樯院髷?shù)據(jù)庫(kù)服務(wù)器(postgres)可以通過(guò)同一個(gè)變 量找到數(shù)據(jù)庫(kù)目錄。
選擇模板數(shù)據(jù)庫(kù)的編碼方式。這將是你以后創(chuàng)建的數(shù)據(jù)庫(kù)的缺省編碼方式,除非你創(chuàng)建數(shù) 據(jù)庫(kù)時(shí)覆蓋了它。缺省是從區(qū)域設(shè)置中獲得的,如果沒(méi)有區(qū)域設(shè)置,就是 SQL_ASCII。PostgreSQL服務(wù)器支持的 字符集在節(jié)Section 22.2.1里描述。
為數(shù)據(jù)庫(kù)集群設(shè)置缺省的區(qū)域。如果沒(méi)有聲明這個(gè)選項(xiàng),那么區(qū)域是從initdb 運(yùn)行的環(huán)境中繼承過(guò)來(lái)的。區(qū)域設(shè)置在節(jié)Section 22.1里描述。
類似--locale,但是只設(shè)置特殊范疇的區(qū)域。
該選項(xiàng)指定事務(wù)日志應(yīng)該被存儲(chǔ)的目錄。
選擇數(shù)據(jù)庫(kù)超級(jí)用戶的用戶名。缺省是運(yùn)行initdb的用戶的有效用戶。 超級(jí)用戶的名字是什么并不重要,但是可以選擇習(xí)慣的名字postgres, 即使操作系統(tǒng)的用戶名字不一樣也沒(méi)關(guān)系。
令initdb提示輸入數(shù)據(jù)庫(kù)超級(jí)用戶的口令。如果你不準(zhǔn)備使用口令認(rèn)證, 這個(gè)東西并不重要。否則你將不能使用口令認(rèn)證,直到你設(shè)置了口令。
令initdb從一個(gè)文件里讀取數(shù)據(jù)庫(kù)超級(jí)用戶的口令。該文件的第一行 將被當(dāng)作口令使用。
其它不常用的參數(shù)還有:
從初始化后端打印調(diào)試輸出以及一些其它的一些普通用戶不太感興趣的信息。初始化后端是 initdb用于創(chuàng)建系統(tǒng)表的程序。這個(gè)選項(xiàng)生成大量非??菰锏妮敵?。
告訴initdb到哪里找初始化數(shù)據(jù)庫(kù)所需要的輸入文件。通常是不必要的。 如果需要你明確聲明的話,程序會(huì)提示你輸入。
默認(rèn)地,當(dāng)initdb發(fā)現(xiàn)一些錯(cuò)誤妨礙它完成創(chuàng)建數(shù)據(jù)庫(kù)集群的工作時(shí), 它將在檢測(cè)到不能結(jié)束工作之前將其創(chuàng)建的所有文件刪除。這個(gè)選項(xiàng)禁止任何清理動(dòng)作, 因而對(duì)調(diào)試很有用。
輸出initdb版本并退出。
顯示關(guān)于initdb命令行參數(shù)的幫助并退出。
聲明數(shù)據(jù)庫(kù)集群存儲(chǔ)的目錄;可以用-D選項(xiàng)覆蓋。
該應(yīng)用,同大部分其他PostgreSQL應(yīng)用一樣,也使用libpq 支持的環(huán)境變量(請(qǐng)參閱Section 31.13)。
initdb也可以通過(guò)pg_ctl initdb被調(diào)用。