?
This document uses PHP Chinese website manual Release
所有參數(shù)名都是大小寫(xiě)不敏感的。每個(gè)參數(shù)都可以接受五種類(lèi)型之一: 布爾、整數(shù)、浮點(diǎn)數(shù)、字符串,枚舉。布爾值可以是(都是大小寫(xiě)無(wú)關(guān)) on,off,true, false,yes,no, 1,0或這些東西的任意清晰無(wú)歧義的前綴。
一些設(shè)置指定內(nèi)存或時(shí)間值,其隱含的單位可能是:kB(千字節(jié))、塊(通常是 8KB)、 毫秒、秒、分鐘等等。隱含單位可以通過(guò)引用pg_settings.unit. 獲取。為了避免混淆,可以在指定數(shù)值的同時(shí)指定單位。可用內(nèi)存單位: kB(千字節(jié)),MB(兆字節(jié))和 GB(吉字節(jié));可用時(shí)間單位:ms(毫秒), s(秒),min(分鐘), h(小時(shí)), andd(天)。 內(nèi)存單位中的"千"等于 1024 ,而不是 1000。
以與字符串參數(shù)相同的方式設(shè)置"enum"類(lèi)型的參數(shù),但被限制到一個(gè)有限的一組值。 pg_settings.enumvals中有可用值,枚舉參數(shù)值與大小寫(xiě)無(wú)關(guān)。
設(shè)置這些參數(shù)的一個(gè)方法是編輯postgresql.conf文件, 它通常在數(shù)據(jù)目錄里(當(dāng)數(shù)據(jù)庫(kù)集的目錄初始化的時(shí)候,一個(gè)缺省的拷貝將會(huì)被安裝在那)。 比如,下面是一個(gè)該文件的例子:
# 這是一個(gè)注釋 log_connections = yes log_destination = 'syslog' search_path = '"$user", public' shared_buffers = 128MB
像你看到的那樣,選項(xiàng)是每條一行。選項(xiàng)名和值之間的等號(hào)是可選的。 空白和空行被忽略。井號(hào)(#)引入注釋。 非簡(jiǎn)單標(biāo)識(shí)符或者數(shù)字必須用單引號(hào)包圍。如果需要在參數(shù)值里嵌入單引號(hào), 要么寫(xiě)兩個(gè)單引號(hào)(推薦方法),要么用反斜扛包圍
除了設(shè)置參數(shù)以外,postgresql.conf文件中還可以使用 include directives在其自身所在位置插入其他文件的內(nèi)容。 包含指令的語(yǔ)法如下:
include 'filename'
如果文件名不是絕對(duì)路徑那么將被當(dāng)作相對(duì)于包含指令所屬文件的所在目錄。 包含可以被嵌套。
主服務(wù)器進(jìn)程每次收到SIGHUP信號(hào)(最簡(jiǎn)單的發(fā)送方法就是使用 pg_ctl reload)后都會(huì)重新讀取這個(gè)配置文件。同時(shí)主服務(wù)器進(jìn)程 也將這個(gè)信號(hào)廣播給所有正在運(yùn)行的子服務(wù)器進(jìn)程,這樣現(xiàn)有會(huì)話(huà)也能得到新值。 另外,你可以只向一個(gè)服務(wù)器進(jìn)程直接發(fā)送信號(hào)。有些參數(shù)只能在服務(wù)器啟動(dòng)的 時(shí)候設(shè)置;對(duì)這些條目的修改將被忽略,直到下次服務(wù)器重啟。
第二種設(shè)置這些配置參數(shù)的方法是把它們作為命令行參數(shù)傳遞給 postgres,比如:
postgres -c log_connections=yes -c log_destination='syslog'
命令行選項(xiàng)覆蓋postgresql.conf中的選項(xiàng)。 編輯postgresql.conf在運(yùn)行時(shí)改變其數(shù)值, 因此,雖然命令行方法很方便,但會(huì)付出靈活性的代價(jià)。
有時(shí)候,給某一個(gè)特定會(huì)話(huà)一個(gè)命令行參數(shù)也是很有用的??梢栽诳蛻?hù)端使用 環(huán)境變量PGOPTIONS來(lái)實(shí)現(xiàn)這個(gè)目的(可以用于任何基于 libpq的客戶(hù)端應(yīng)用,不光是psql):
env PGOPTIONS='-c geqo=off' psql
請(qǐng)注意,這個(gè)變量對(duì)那些需要在服務(wù)器啟動(dòng)后固定的選項(xiàng)或者必須在 postgresql.conf里聲明的選項(xiàng)是無(wú)效的。
并且,我們可以給一個(gè)用戶(hù)或者一個(gè)數(shù)據(jù)庫(kù)賦予一套選項(xiàng)設(shè)置。在一個(gè)會(huì)話(huà) 開(kāi)始的時(shí)候,裝載所涉及到的用戶(hù)和數(shù)據(jù)庫(kù)的缺省設(shè)置。命令 ALTER USER和ALTER DATABASE 分別用于配置這些設(shè)置。針對(duì)每個(gè)數(shù)據(jù)庫(kù)的設(shè)置將覆蓋任何從 postgres命令行或者配置文件收到的設(shè)置,然后接著 又被針對(duì)每個(gè)用戶(hù)的設(shè)置覆蓋;最后又會(huì)都被針對(duì)每個(gè)會(huì)話(huà)的設(shè)置覆蓋。
一些選項(xiàng)可以在獨(dú)立的 SQLSQL會(huì)話(huà)中修改,方法是使用 SET命令,比如:
SET ENABLE_SEQSCAN TO OFF;
如果允許用SET設(shè)置,這種針對(duì)每個(gè)數(shù)據(jù)庫(kù)的設(shè)置將覆蓋任何來(lái)自 其它方面的設(shè)置。有些參數(shù)不能通過(guò)SET改變:比如, 如果這些選項(xiàng)不重啟動(dòng)PostgreSQL就無(wú)法合理控制其行為。 同樣,有些參數(shù)只能由超級(jí)用戶(hù)通過(guò)SET或ALTER修改, 而普通用戶(hù)不能修改。
SHOW命令允許檢查所有參數(shù)的當(dāng)前值。
我們也可以用虛表pg_settings (在Section 45.55)里描述)來(lái)顯示和更新當(dāng)前會(huì)話(huà)的運(yùn)行 時(shí)參數(shù)。它等效于SHOW和SET,但是用起來(lái)更方便, 因?yàn)樗梢院推渌磉B接起來(lái)使用,或者用任意用戶(hù)需要的選擇條件來(lái)查詢(xún)。