PostgreSQL initdb

2021-09-13 17:11 更新

initdb — 創(chuàng)建一個(gè)新的PostgreSQL數(shù)據(jù)庫(kù)集簇

大綱

initdb [option...] [ --pgdata | -D ] directory

描述

initdb創(chuàng)建一個(gè)新的PostgreSQL數(shù)據(jù)庫(kù)集簇。一個(gè)數(shù)據(jù)庫(kù)集簇是由一個(gè)單一服務(wù)器實(shí)例管理的數(shù)據(jù)庫(kù)的集合。

一個(gè)數(shù)據(jù)庫(kù)集簇的創(chuàng)建包括創(chuàng)建存放數(shù)據(jù)庫(kù)數(shù)據(jù)的目錄、生成共享目錄表(屬于整個(gè)集簇而不是任何特定數(shù)據(jù)庫(kù)的表)并且創(chuàng)建template1postgres數(shù)據(jù)庫(kù)。當(dāng)你后來(lái)創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)時(shí),任何在template1數(shù)據(jù)庫(kù)中的東西都會(huì)被復(fù)制(因此,任何已安裝在template1中的東西都會(huì)被自動(dòng)地復(fù)制到后來(lái)創(chuàng)建的每一個(gè)數(shù)據(jù)庫(kù)中)。 postgres數(shù)據(jù)庫(kù)是便于用戶(hù)、工具和第三方應(yīng)用使用的默認(rèn)數(shù)據(jù)庫(kù)。

盡管initdb將嘗試創(chuàng)建指定的數(shù)據(jù)目錄,它可能沒(méi)有權(quán)限(如果想要的數(shù)據(jù)目錄的父目錄被根用戶(hù)擁有)。要在這樣一種設(shè)置中初始化,作為 root 創(chuàng)建一個(gè)空數(shù)據(jù)目錄,然后使用chown將該目錄賦予給數(shù)據(jù)庫(kù)用戶(hù)賬戶(hù),再然后su成為該數(shù)據(jù)庫(kù)用戶(hù)并運(yùn)行initdb

initdb必須以將擁有該服務(wù)器進(jìn)程的用戶(hù)運(yùn)行,因?yàn)樵摲?wù)器需要訪(fǎng)問(wèn)initdb創(chuàng)建的文件和目錄。因?yàn)樵摲?wù)器不能作為 root 運(yùn)行,你不能以 root 運(yùn)行initdb(事實(shí)上它會(huì)拒絕這樣做)。

由于安全原因,由initdb創(chuàng)建的新集簇默認(rèn)將只能由集簇?fù)碛姓咴L(fǎng)問(wèn)。--allow-group-access選項(xiàng)允許與集簇?fù)碛姓咄M的任何用戶(hù)讀取集簇中的文件。這對(duì)非特權(quán)用戶(hù)執(zhí)行備份很有用。

initdb初始化該數(shù)據(jù)庫(kù)集簇的默認(rèn)區(qū)域和字符集編碼。當(dāng)一個(gè)數(shù)據(jù)庫(kù)被創(chuàng)建時(shí),其字符集編碼、排序順序(LC_COLLATE)和字符集類(lèi)(LC_CTYPE,例如大寫(xiě)、小寫(xiě)、數(shù)字)可以被獨(dú)立設(shè)置。initdbtemplate1數(shù)據(jù)庫(kù)確定那些設(shè)置,它們將作為所有其他數(shù)據(jù)庫(kù)的默認(rèn)值。

要修改默認(rèn)排序順序或字符集類(lèi),使用--lc-collate--lc-ctype選項(xiàng)。除CPOSIX之外的排序順序也有性能罰值。由于這些原因,在運(yùn)行initdb時(shí)選擇正確的區(qū)域很重要。

余下的區(qū)域分類(lèi)可以在服務(wù)器啟動(dòng)之后改變。你也可以使用--locale來(lái)為所有區(qū)域分類(lèi)設(shè)置默認(rèn)值,包括排序順序和字符集類(lèi)。所有服務(wù)器區(qū)域值(lc_*)可以通過(guò)SHOW ALL顯示。詳見(jiàn)第 23.1 節(jié)。

要修改默認(rèn)編碼,使用--encoding。詳見(jiàn)第 23.3 節(jié).

選項(xiàng)

-A authmethod
--auth=authmethod

這個(gè)選項(xiàng)為本地用戶(hù)指定在pg_hba.conf中使用的默認(rèn)認(rèn)證方法(hostlocal行)。initdb將使用指定的認(rèn)證方法為非復(fù)制連接以及復(fù)制連接填充pg_hba.conf項(xiàng)。

除非你信任你系統(tǒng)上的所有本地用戶(hù),不要使用trust。為了安裝方便,trust是默認(rèn)值。

--auth-host=authmethod

這個(gè)選項(xiàng)為通過(guò) TCP/IP 連接的本地用戶(hù)指定在pg_hba.conf中使用的認(rèn)證方法(host行)。

--auth-local=authmethod

這個(gè)選項(xiàng)為通過(guò) Unix 域套接字連接的本地用戶(hù)指定在pg_hba.conf中使用的認(rèn)證方法(local行)。

-D directory
--pgdata=directory

這個(gè)選項(xiàng)指定數(shù)據(jù)庫(kù)集簇應(yīng)該存放的目錄。這是initdb要求的唯一信息,但是你可以通過(guò)設(shè)定PGDATA環(huán)境變量來(lái)避免書(shū)寫(xiě)它,這很方便因?yàn)橹髷?shù)據(jù)庫(kù)服務(wù)器(postgres)可以使用同一個(gè)變量來(lái)找到數(shù)據(jù)庫(kù)目錄。

-E encoding
--encoding=encoding

選擇模板數(shù)據(jù)庫(kù)的編碼。這也將是后來(lái)創(chuàng)建的任何數(shù)據(jù)庫(kù)的默認(rèn)編碼,除非你覆蓋它。默認(rèn)值來(lái)自于區(qū)域,或者如果該值不起作用則為SQL_ASCII。PostgreSQL服務(wù)器所支持的字符集在第 23.3.1 節(jié)中描述。

-g
--allow-group-access

允許與集簇?fù)碛姓咄M的用戶(hù)讀取initdb創(chuàng)建的所有集簇文件。 Windows會(huì)忽略此選項(xiàng),因?yàn)樗恢С?acronym class="acronym">POSIX樣式的組權(quán)限。

-k
--data-checksums

在數(shù)據(jù)頁(yè)面上使用校驗(yàn)碼來(lái)幫助檢測(cè) I/O 系統(tǒng)造成的損壞。啟用校驗(yàn)碼將會(huì)引起顯著的性能懲罰。如果設(shè)置,則為所有對(duì)象計(jì)算校驗(yàn)和,在整個(gè)數(shù)據(jù)庫(kù)中。 所有校驗(yàn)和失敗都將報(bào)告在 pg_stat_database 視圖。

--locale=locale

為數(shù)據(jù)庫(kù)集簇設(shè)置默認(rèn)區(qū)域。如果這個(gè)選項(xiàng)沒(méi)有被指定,該區(qū)域?qū)?code class="command">initdb所運(yùn)行的環(huán)境中繼承。區(qū)域支持在第 23.1 節(jié)中描述。

--lc-collate=locale
--lc-ctype=locale
--lc-messages=locale
--lc-monetary=locale
--lc-numeric=locale
--lc-time=locale

--locale相似,但是只在指定的分類(lèi)中設(shè)置區(qū)域。

--no-locale

等效于--locale=C。

-N
--no-sync

默認(rèn)情況下,initdb將等待所有文件被安全地寫(xiě)到磁盤(pán)。這個(gè)選項(xiàng)會(huì)導(dǎo)致initdb不等待就返回,這當(dāng)然更快,但是也意味著一次后續(xù)的操作系統(tǒng)崩潰可能讓數(shù)據(jù)目錄損壞。通常,這個(gè)選項(xiàng)對(duì)測(cè)試有用,但是不應(yīng)該在創(chuàng)建生產(chǎn)安裝時(shí)使用。

--pwfile=filename

initdb從一個(gè)文件讀取數(shù)據(jù)庫(kù)超級(jí)用戶(hù)的口令。該文件的第一行被當(dāng)作口令。

-S
--sync-only

安全地把所有數(shù)據(jù)庫(kù)文件寫(xiě)入到磁盤(pán)并退出。這不會(huì)執(zhí)行任何正常的initdb操作。

-T config
--text-search-config=config

設(shè)置默認(rèn)的文本搜索配置。詳見(jiàn)default_text_search_config。

-U username
--username=username

選擇數(shù)據(jù)庫(kù)超級(jí)用戶(hù)的用戶(hù)名。這個(gè)的默認(rèn)值是實(shí)際運(yùn)行initdb的用戶(hù)的名稱(chēng)。超級(jí)用戶(hù)的名字是什么真的不重要,但是你可以選擇保留常用的名字postgres,即使操作系統(tǒng)的用戶(hù)名不同。

-W
--pwprompt

initdb提示要求為數(shù)據(jù)庫(kù)超級(jí)用戶(hù)給予一個(gè)口令。如果你沒(méi)有計(jì)劃使用口令認(rèn)證,這就不重要。否則在你設(shè)置一個(gè)口令之前你就無(wú)法使用口令認(rèn)證。

-X directory
--waldir=directory

這個(gè)選項(xiàng)指定預(yù)寫(xiě)式日志會(huì)被存儲(chǔ)在哪個(gè)目錄中。

--wal-segsize=size

設(shè)置WAL段尺寸,以兆字節(jié)為單位。這是WAL日志中每個(gè)文件的尺寸。默認(rèn)的尺寸為16兆字節(jié)。該值必須位于2的1次冪和1024次冪(兆字節(jié))之間。這個(gè)選項(xiàng)只能在初始化期間設(shè)置,并且之后不能更改。

調(diào)整這個(gè)值來(lái)控制WAL日志傳送或者歸檔可能會(huì)有用。此外,在有大量WAL的數(shù)據(jù)庫(kù)中,每個(gè)目錄中數(shù)量巨大的WAL文件可能會(huì)成為性能和管理問(wèn)題。增加WAL文件尺寸將會(huì)降低WAL文件的數(shù)量。

其他較少使用的選項(xiàng):

-d
--debug

打印來(lái)自引導(dǎo)后端的調(diào)試輸出以及普通大眾不那么感興趣的一些消息。引導(dǎo)后端被程序initdb用來(lái)創(chuàng)建目錄表。這個(gè)選項(xiàng)會(huì)生成大量極端無(wú)聊的輸出。

-L directory

指定initdb應(yīng)從哪里尋找它的輸入文件來(lái)初始化數(shù)據(jù)庫(kù)集簇。這通常沒(méi)有必要。如果你需要顯式指定它們的位置,你應(yīng)該被告知。

-n
--no-clean

默認(rèn)情況下,當(dāng)initdb確定有一個(gè)錯(cuò)誤阻止它完整地創(chuàng)建數(shù)據(jù)庫(kù)集簇,它會(huì)移除在它發(fā)現(xiàn)無(wú)法完成任務(wù)之前創(chuàng)建的任何文件。這個(gè)選項(xiàng)會(huì)抑制這種整理并且對(duì)調(diào)試有用。

其他選項(xiàng):

-V
--version

打印initdb版本并退出。

-?
--help

顯示有關(guān)initdb命令行參數(shù)的幫助并退出。

環(huán)境

PGDATA

指定數(shù)據(jù)庫(kù)集簇應(yīng)該被存放的目錄,可以使用-D選項(xiàng)覆蓋。

PG_COLOR

規(guī)定在診斷消息中是否使用顏色。可能的值為always、 autonever。

TZ

指定創(chuàng)建的數(shù)據(jù)集簇的默認(rèn)時(shí)區(qū)。值應(yīng)該是一個(gè)完整的時(shí)區(qū)名稱(chēng)(見(jiàn)第 8.5.3 節(jié))。

和大部分其他PostgreSQL工具相似,這個(gè)工具也使用libpq(見(jiàn)第 33.14 節(jié))支持的環(huán)境變量。

注解

initdb可以通過(guò)pg_ctl initdb被調(diào)用。

參見(jiàn)

pg_ctl , postgres


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)