PostgreSQL 客戶(hù)端連接默認(rèn)值

2021-08-31 14:25 更新
19.11.1. 語(yǔ)句行為
19.11.2. 區(qū)域和格式化
19.11.3. 共享庫(kù)預(yù)載入
19.11.4. 其他默認(rèn)值

19.11.1. 語(yǔ)句行為

client_min_messages (enum)

控制被發(fā)送給客戶(hù)端的 消息級(jí)別(表 19.2. 消息嚴(yán)重級(jí)別)。有效值是DEBUG5、 DEBUG4DEBUG3、 DEBUG2、 DEBUG1、LOG、NOTICE、 WARNINGERROR。 每個(gè)級(jí)別都包括其后的所有級(jí)別。級(jí)別越靠后,被發(fā)送的消息越少。默認(rèn)值是NOTICE。 注意LOG在這里有與 log_min_messages中不同的排名。

INFO 級(jí)別的消息總是被發(fā)送到客戶(hù)端。

search_path (string)

這個(gè)變量指定當(dāng)一個(gè)對(duì)象(表、數(shù)據(jù)類(lèi)型、函數(shù)等)被用一個(gè)無(wú)模式限定的簡(jiǎn)單名稱(chēng)引用時(shí),用于進(jìn)行搜索該對(duì)象的模式順序。當(dāng)在不同模式中有同名對(duì)象時(shí),將使用第一個(gè)在搜索路徑中被找到的對(duì)象。一個(gè)不屬于搜索路徑中任何一個(gè)模式的對(duì)象只能通過(guò)用限定名(帶點(diǎn)號(hào))指定包含它的模式來(lái)引用。

search_path的值必需是一個(gè)逗號(hào)分隔的模式名列表。任何不是一個(gè)已有模式的名稱(chēng),或者是一個(gè)用戶(hù)不具有USAGE權(quán)限的模式,將被安靜地忽略。

如果列表項(xiàng)之一是特殊名$user,則具有SESSION_USER返回的名字的模式將取代它(如果有這樣一個(gè)模式并且該用戶(hù)有該模式的USAGE權(quán)限;如果沒(méi)有,$user會(huì)被忽略)。

系統(tǒng)目錄模式pg_catalog總是被搜索,不管它是否在搜索路徑中被提及。如果它在路徑中被提及,那么它將被按照路徑指定的順序搜索。如果pg_catalog不在路徑中,則它將在任何路徑項(xiàng)之前被搜索。

同樣,當(dāng)前會(huì)話(huà)的臨時(shí)表模式pg_temp_nnn 也總是被搜索(如果存在)。它可以在路徑中通過(guò)使用別名pg_temp 顯式列出。如果在路徑中沒(méi)有列出,那么會(huì)首先對(duì)它進(jìn)行搜索(甚至是在pg_catalog之前)。然而,臨時(shí)模式只被用來(lái)搜索關(guān)系(表、視圖、序列等)和數(shù)據(jù)類(lèi)型名。它從不用于搜索函數(shù)或操作符名。

當(dāng)對(duì)象創(chuàng)建時(shí)沒(méi)有指定一個(gè)特定目標(biāo)模式,它們將被放置在search_path中第一個(gè)合法模式中。如果搜索路徑為空將報(bào)告一個(gè)錯(cuò)誤。

這個(gè)參數(shù)的缺省值是"$user", public。這種設(shè)置支持一個(gè)數(shù)據(jù)庫(kù)(其中沒(méi)有用戶(hù)擁有私有模式,并且所有人共享使用public)、每個(gè)用戶(hù)私有模式及其組合的共享使用。其它效果可以通過(guò)全局或者針對(duì)每個(gè)用戶(hù)修改默認(rèn)搜索路徑設(shè)置獲得。

更多有關(guān)方案處理的信息,請(qǐng)參考第 5.9 節(jié)。特別地,只有當(dāng)數(shù)據(jù)庫(kù)只有一個(gè)用戶(hù)或者有少數(shù)的相互信任的用戶(hù)時(shí),默認(rèn)配置是合適的。

搜索路徑的當(dāng)前有效值可以通過(guò)SQL函數(shù)current_schemas檢查(見(jiàn)第 9.26 節(jié))。它和檢查search_path的值不太一樣,因?yàn)? current_schemas顯示出現(xiàn)在search_path中的項(xiàng)如何被解析。

row_security (boolean)

這個(gè)變量控制是否以?huà)伋鲆粋€(gè)錯(cuò)誤來(lái)代替應(yīng)用一條行安全性策略。在設(shè)置為on時(shí),策略正常應(yīng)用。在設(shè)置為off時(shí),只要有至少一條策略被應(yīng)用則查詢(xún)就會(huì)失敗。默認(rèn)為on。受限的行可見(jiàn)性會(huì)導(dǎo)致不正確的結(jié)果時(shí),可將其改成off。例如,pg_dump默認(rèn)會(huì)做這種更改。這個(gè)變量對(duì)能繞過(guò)每一條行安全性策略的角色(即超級(jí)用戶(hù)和具有 BYPASSRLS)屬性的角色沒(méi)有效果。

更多關(guān)于行安全性策略的信息請(qǐng)見(jiàn)CREATE POLICY。

default_table_access_method (string)

如果 CREATE命令沒(méi)有顯式指定訪(fǎng)問(wèn)方法,則此參數(shù)指定在創(chuàng)建表或物化視圖時(shí)使用的默認(rèn)表訪(fǎng)問(wèn)方法, 或者在使用SELECT ... INTO 時(shí),不允許指定表訪(fǎng)問(wèn)方法。默認(rèn)為heap

default_tablespace (string)

這個(gè)變量指定當(dāng)一個(gè)CREATE命令沒(méi)有顯式指定一個(gè)表空間時(shí),創(chuàng)建對(duì)象(表和索引)的默認(rèn)表空間。 它還決定了指導(dǎo)未來(lái)分區(qū)的分區(qū)關(guān)系的表空間。

該值要么是一個(gè)表空間的名字,要么是一個(gè)指定使用當(dāng)前數(shù)據(jù)庫(kù)默認(rèn)表空間的空字符串。如果該值和任何現(xiàn)有表空間的名字都不匹配,PostgreSQL將自動(dòng)使用當(dāng)前數(shù)據(jù)庫(kù)的默認(rèn)表空間。如果指定了一個(gè)非默認(rèn)的表空間,用戶(hù)必須對(duì)它有CREATE權(quán)限,否則創(chuàng)建企圖將失敗。

這個(gè)變量不被用于臨時(shí)表,對(duì)臨時(shí)表會(huì)使用?temp_tablespaces?。

當(dāng)創(chuàng)建數(shù)據(jù)庫(kù)時(shí)也會(huì)使用這個(gè)變量。默認(rèn)情況下,一個(gè)新數(shù)據(jù)庫(kù)會(huì)從它的模板數(shù)據(jù)庫(kù)繼承其表空間設(shè)置。

有關(guān)表空間的更多的信息,請(qǐng)見(jiàn)第 22.6 節(jié)。

temp_tablespaces (string)

這個(gè)變量指定當(dāng)一個(gè)CREATE命令沒(méi)有顯式指定一個(gè)表空間時(shí),創(chuàng)建臨時(shí)對(duì)象(臨時(shí)表和臨時(shí)表上的索引)的默認(rèn)表空間。用于排序大型數(shù)據(jù)集的臨時(shí)文件也被創(chuàng)建在這些表空間中。

該值是一個(gè)表空間名字的列表。當(dāng)列表中有多于一個(gè)名稱(chēng)時(shí),每次一個(gè)臨時(shí)對(duì)象被創(chuàng)建時(shí)PostgreSQL隨機(jī)選擇列表中的一個(gè)成員。例外是在一個(gè)事務(wù)中,連續(xù)創(chuàng)建的臨時(shí)對(duì)象被放置在里表中的連續(xù)表空間中。如果列表被選中元素是一個(gè)空字符串,PostgreSQL將自動(dòng)使用當(dāng)前數(shù)據(jù)庫(kù)的默認(rèn)表空間。

當(dāng)temp_tablespaces被交互式地設(shè)置時(shí),指定一個(gè)不存在的表空間是一種錯(cuò)誤,類(lèi)似于為用戶(hù)指定一個(gè)不具有CREATE權(quán)限的表空間。不過(guò),當(dāng)使用一個(gè)之前設(shè)置的值時(shí),不存在的表空間會(huì)被忽略,就像用戶(hù)缺少CREATE權(quán)限的表空間一樣。特殊地,使用一個(gè)在postgresql.conf中設(shè)置的值時(shí),這條規(guī)則起效。

默認(rèn)值是一個(gè)空字符串,它使得所有臨時(shí)對(duì)象被創(chuàng)建在當(dāng)前數(shù)據(jù)庫(kù)的默認(rèn)表空間中。

參閱?default_tablespace?。

check_function_bodies (boolean)

這個(gè)參數(shù)通常為打開(kāi) 。當(dāng)設(shè)置為off時(shí),它禁用CREATE FUNCTION期間對(duì)函數(shù)體字符串的驗(yàn)證。禁用驗(yàn)證避免了驗(yàn)證處理的副作用并且避免了如向前引用導(dǎo)致的偽肯定。在代表其他用戶(hù)載入函數(shù)之前設(shè)置這個(gè)參數(shù)為off; pg_dump會(huì)自動(dòng)這樣做。

default_transaction_isolation (enum)

每個(gè) SQL 事務(wù)都有一個(gè)隔離級(jí)別,可以是讀未提交、讀已提交可重復(fù)讀或者可序列化。這個(gè)參數(shù)控制每個(gè)新事務(wù)的默認(rèn)隔離級(jí)別。默認(rèn)是 讀已提交

更多信息請(qǐng)參閱第 13 章SET TRANSACTION。

default_transaction_read_only (boolean)

一個(gè)只讀的 SQL 事務(wù)不能修改非臨時(shí)表。這個(gè)參數(shù)控制每個(gè)新事務(wù)的默認(rèn)只讀狀態(tài) 。默認(rèn)是off(讀/寫(xiě))。

更多信息請(qǐng)參考SET TRANSACTION。

default_transaction_deferrable (boolean)

當(dāng)運(yùn)行在可序列化隔離級(jí)別時(shí),一個(gè)可延遲只讀 SQL 事務(wù)可以在它被允許繼續(xù)之前延遲一段時(shí)間。但是,一旦它開(kāi)始執(zhí)行就不會(huì)產(chǎn)生任何用來(lái)保證可序列化性的負(fù)荷;因此序列化代碼將沒(méi)有任何理由因?yàn)椴l(fā)更新而強(qiáng)制它中斷,使得這個(gè)選項(xiàng)適合于長(zhǎng)時(shí)間運(yùn)行的只讀事務(wù)。

這個(gè)參數(shù)控制每個(gè)新事務(wù)的默認(rèn)可延遲狀態(tài)。目前它對(duì)讀寫(xiě)事務(wù)或者那些操作在低于可序列化隔離級(jí)別上的事務(wù)無(wú)效。默認(rèn)值是off

詳情請(qǐng)參閱SET TRANSACTION。

session_replication_role (enum)

為當(dāng)前會(huì)話(huà)控制復(fù)制相關(guān)的觸發(fā)器和規(guī)則的觸發(fā)。需要超級(jí)用戶(hù)權(quán)限才能設(shè)置這個(gè)變量,并且會(huì)導(dǎo)致丟棄任何之前緩存下來(lái)的查詢(xún)計(jì)劃。可能的值有origin(默認(rèn))、replicalocal

這個(gè)設(shè)置的預(yù)期用途是由邏輯復(fù)制系統(tǒng)在應(yīng)用所復(fù)制的更改時(shí)將它設(shè)置為replica。其效果將是觸發(fā)器和規(guī)則(沒(méi)有對(duì)其默認(rèn)配置做修改)在復(fù)制機(jī)上將不會(huì)被觸發(fā)。更多信息請(qǐng)參考ALTER TABLE的子句ENABLE TRIGGER以及 ENABLE RULE

PostgreSQL在內(nèi)部會(huì)把設(shè)置originlocal同樣對(duì)待。第三方復(fù)制系統(tǒng)可能會(huì)把這兩個(gè)值用于其內(nèi)部目的,例如把local用來(lái)標(biāo)出一個(gè)不應(yīng)復(fù)制其更改的會(huì)話(huà)。

因?yàn)橥怄I被實(shí)現(xiàn)為觸發(fā)器,將這個(gè)參數(shù)設(shè)置為replica還會(huì)禁用所有的外鍵檢查,如果使用不當(dāng)可能會(huì)讓數(shù)據(jù)處于一種不一致的狀態(tài)。

statement_timeout (integer)

中止任何使用了超過(guò)指定時(shí)間量的語(yǔ)句。 如果log_min_error_statement被設(shè)置為ERROR或更低,語(yǔ)句如果超時(shí)也會(huì)被記錄。 如果指定值時(shí)沒(méi)有單位,則以毫秒為單位。一個(gè)零值(默認(rèn))將禁用超時(shí)。

超時(shí)從命令到達(dá)服務(wù)器的時(shí)間開(kāi)始計(jì)算,一直到它被服務(wù)器完成為止。 如果單個(gè)簡(jiǎn)單查詢(xún)消息中出現(xiàn)多個(gè) SQL 語(yǔ)句,超時(shí)將分別應(yīng)用于每個(gè)語(yǔ)句。(PostgreSQL 13 之前的版本通常將超時(shí)應(yīng)用于整個(gè)查詢(xún)字符串。 在擴(kuò)展查詢(xún)協(xié)議中,當(dāng)任何與查詢(xún)相關(guān)的消息(解析、綁定、執(zhí)行、描述)到達(dá)時(shí),超時(shí)就開(kāi)始運(yùn)行,并且可以通過(guò)執(zhí)行完成或同步消息來(lái)取消超時(shí)。

我們不推薦在postgresql.conf中設(shè)置statement_timeout,因?yàn)樗鼤?huì)影響所有會(huì)話(huà)。

lock_timeout (integer)

如果任何語(yǔ)句在試圖獲取表、索引、行或其他數(shù)據(jù)庫(kù)對(duì)象上的鎖時(shí)等到超過(guò)指定的時(shí)間量,該語(yǔ)句將被中止。 該時(shí)間限制獨(dú)立地應(yīng)用于每一次鎖獲取嘗試。該限制會(huì)應(yīng)用到顯式鎖定請(qǐng)求(如LOCK TABLE或不帶NOWAITSELECT FOR UPDATE)和隱式獲得的鎖。 如果指定值時(shí)沒(méi)有單位,則以毫秒為單位。一個(gè)零值(默認(rèn))將禁用超時(shí)。

statement_timeout不同,這個(gè)超時(shí)只在等待鎖時(shí)發(fā)生。注意如果statement_timeout為非零,設(shè)置lock_timeout為相同或更大的值沒(méi)有意義,因?yàn)槭聞?wù)超時(shí)將總是第一個(gè)被觸發(fā)。 如果log_min_error_statement 被設(shè)置為 ERROR或更低,超時(shí)的語(yǔ)句將被記錄。

我們不推薦在postgresql.conf中設(shè)置lock_timeout,因?yàn)樗鼤?huì)影響所有會(huì)話(huà)。

idle_in_transaction_session_timeout (integer)

終止任何已經(jīng)閑置超過(guò)這個(gè)參數(shù)所指定時(shí)間量的打開(kāi)事務(wù)的會(huì)話(huà)。這使得該會(huì)話(huà)所持有的任何鎖被釋放,并且其所持有的連接槽可以被重用,它也允許只對(duì)這個(gè)事務(wù)可見(jiàn)的元組被清理。有關(guān)于此的詳情請(qǐng)見(jiàn)第 24.1 節(jié)

如果指定值時(shí)沒(méi)有單位,則以毫秒為單位。0值(默認(rèn)值)禁用超時(shí)。

vacuum_freeze_table_age (integer)

當(dāng)表的pg_class.relfrozenxid域達(dá)到該設(shè)置指定的年齡時(shí),VACUUM會(huì)執(zhí)行一次激進(jìn)的掃描。激進(jìn)的掃描與常規(guī)VACUUM的不同在于它會(huì)訪(fǎng)問(wèn)每一個(gè)可能包含未凍結(jié) XID 或者 MXID 的頁(yè)面,而不只是那些可能包含死亡元組的頁(yè)面。默認(rèn)值是 1.5 億個(gè)事務(wù)。盡管用戶(hù)可以把這個(gè)值設(shè)置為從 0 到 20 億,VACUUM會(huì)悄悄地將有效值設(shè)置為autovacuum_freeze_max_age值的95%,因此在表上啟動(dòng)一次反回卷自動(dòng)清理之前有機(jī)會(huì)進(jìn)行一次定期手動(dòng)VACUUM。更多信息請(qǐng)見(jiàn) 第 24.1.5 節(jié)

vacuum_freeze_min_age (integer)

指定VACUUM在掃描表時(shí)用來(lái)決定是否凍結(jié)行版本的切斷年齡(以事務(wù)計(jì))。默認(rèn)值是 5 千萬(wàn)個(gè)事務(wù)。盡管用戶(hù)可以將這個(gè)值設(shè)置為從 0 到 10 億,VACUUM會(huì)悄悄地將有效值設(shè)置為autovacuum_freeze_max_age值的一半,這樣在強(qiáng)制執(zhí)行的自動(dòng)清理之間不會(huì)有過(guò)短的時(shí)間間隔。更多信息請(qǐng)見(jiàn) 第 24.1.5 節(jié)。

vacuum_multixact_freeze_table_age (integer)

如果表的pg_class.relminmxid域超過(guò)了這個(gè)設(shè)置指定的年齡,VACUUM會(huì)執(zhí)行一次激進(jìn)的掃描。激進(jìn)的掃描與常規(guī)VACUUM的區(qū)別在于它會(huì)訪(fǎng)問(wèn)每一個(gè)可能包含未凍結(jié) XID 或者 MXID 的頁(yè)面,而不是只掃描那些可能包含死亡元組的頁(yè)面。默認(rèn)值是 1.5 億個(gè)組合事務(wù)。盡管用戶(hù)可以把這個(gè)值設(shè)置為從 0 到 20 億,VACUUM會(huì)悄悄地將有效值設(shè)置為autovacuum_multixact_freeze_max_age值的95%,因此在表上啟動(dòng)一次反回卷自動(dòng)清理之前有機(jī)會(huì)進(jìn)行一次定期手動(dòng) VACUUM。更多信息請(qǐng)見(jiàn)第 24.1.5.1 節(jié)。

vacuum_multixact_freeze_min_age (integer)

指定VACUUM在掃描表時(shí)用來(lái)決定是否把組合事務(wù) ID 替換為一個(gè)更新的事務(wù) ID 或組合事務(wù) ID 的切斷年齡(以組合事務(wù)計(jì))。默認(rèn)值是 5 千萬(wàn)個(gè)組合事務(wù)。盡管用戶(hù)可以將這個(gè)值設(shè)置為從 0 到 10 億,VACUUM會(huì)悄悄地將有效值設(shè)置為autovacuum_multixact_freeze_max_age值的一半,這樣在強(qiáng)制執(zhí)行的自動(dòng)清理之間不會(huì)有過(guò)短的時(shí)間間隔。更多信息請(qǐng)見(jiàn) 第 24.1.5.1 節(jié)。

vacuum_cleanup_index_scale_factor (floating point)

指定在以前的統(tǒng)計(jì)信息收集過(guò)程中計(jì)數(shù)到的堆元組總數(shù)的一個(gè)分?jǐn)?shù),插入不超過(guò)這一數(shù)量所代表的元組不會(huì)導(dǎo)致VACUUM清理階段的索引掃描。這個(gè)設(shè)置當(dāng)前僅適用于B-樹(shù)索引。

如果沒(méi)有元組從堆中刪除,則當(dāng)至少滿(mǎn)足下列條件之一時(shí),在VACUUM清理階段仍會(huì)掃描B-樹(shù)索引:索引統(tǒng)計(jì)信息過(guò)時(shí)或者索引中包含在清理時(shí)可回收的已刪除頁(yè)。如果新近插入的元組數(shù)占上次統(tǒng)計(jì)信息收集時(shí)檢測(cè)到的堆元組總數(shù)的比例超過(guò)vacuum_cleanup_index_scale_factor,則認(rèn)為索引信息已經(jīng)過(guò)時(shí)。堆元組的總數(shù)被存放在索引的元頁(yè)中。注意,直到VACUUM找不到死亡元組之前,元頁(yè)中都不包括這個(gè)數(shù)據(jù)。因此只有在第二次以及之后的 VACUUM周期檢測(cè)不到死亡元組時(shí),清理階段的B-樹(shù)索引掃描才能被跳過(guò)。

該值的取值范圍可以是從010000000000。當(dāng)vacuum_cleanup_index_scale_factor被設(shè)置為0時(shí),在VACUUM清理期間不會(huì)跳過(guò)索引掃描。默認(rèn)值是0.1。

bytea_output (enum)

設(shè)置bytea類(lèi)型值的輸出格式。有效值是hex(默認(rèn))和 escape(傳統(tǒng)的 PostgreSQL 格式)。詳見(jiàn)第 8.4 節(jié)。不管這個(gè)設(shè)置的值如何,bytea類(lèi)型總是接受這兩種格式的輸入。

xmlbinary (enum)

設(shè)置二進(jìn)制值如何被編碼為 XML。例如,這適用于通過(guò)xmlelement函數(shù)或xmlforest函數(shù)將bytea值轉(zhuǎn)換到 XML 值??赡艿闹涤?code class="literal">base64和hex,它們都是用 XML 模式標(biāo)準(zhǔn)定義的。默認(rèn)值是 base64。更多關(guān)于 XML 相關(guān)函數(shù)的信息可參閱第 9.15 節(jié)

這里的實(shí)際選擇都是根據(jù)愛(ài)好做出的,只受客戶(hù)端應(yīng)用中可能存在的限制的約束。兩種方法都支持所有可能的值,盡管十六進(jìn)制編碼將比 base64 編碼更大。

xmloption (enum)

當(dāng)在XML和字符串值之間進(jìn)行轉(zhuǎn)換時(shí),無(wú)論設(shè)置DOCUMENT或 CONTENT都是隱式的??蓞㈤哠ection 8.13。 有效值是DOCUMENT和CONTENT。 缺省值是CONTENT。當(dāng)在 XML 和字符串值之間進(jìn)行轉(zhuǎn)換時(shí),設(shè)置DOCUMENTCONTENT都是隱式的。詳見(jiàn)第 8.13 節(jié)。有效值是 DOCUMENTCONTENT。默認(rèn)值是CONTENT

根據(jù) SQL 標(biāo)準(zhǔn),設(shè)置這個(gè)選項(xiàng)的命令是:

SET XML OPTION { DOCUMENT | CONTENT };

這種語(yǔ)法在 PostgreSQL 也可用。

gin_pending_list_limit (integer)

設(shè)置fastupdate被啟用時(shí)可以使用的 GIN索引的待處理列表的最大尺寸。 如果該列表增長(zhǎng)到超過(guò)這個(gè)最大尺寸,會(huì)通過(guò)批量將其中的項(xiàng)移入索引的主 GIN 數(shù)據(jù)結(jié)構(gòu)來(lái)清理列表。 如果指定值時(shí)沒(méi)有單位,則以千字節(jié)為單位。默認(rèn)值是四兆字節(jié)(4MB)。 可以通過(guò)更改索引的存儲(chǔ)參數(shù)來(lái)為個(gè)別 GIN 索引覆蓋這個(gè)設(shè)置。更多信息請(qǐng)見(jiàn)第 66.4.1 節(jié)第 66.5 節(jié)。

19.11.2. 區(qū)域和格式化

DateStyle (string)

設(shè)置日期和時(shí)間值的顯示格式,以及解釋有歧義的日期輸入值的規(guī)則。由于歷史原因, 這個(gè)變量包含兩個(gè)獨(dú)立的部分:輸出格式聲明(ISO、Postgres、SQLGerman)、 輸入/輸出的年/月/日順序(DMY、 MDYYMD)。這些可以被獨(dú)立設(shè)置或者一起設(shè)置。關(guān)鍵字EuroEuropeanDMY的同義詞;關(guān)鍵字USNonEuroNonEuropeanMDY的同義詞。詳見(jiàn)第 8.5 節(jié)。內(nèi)建默認(rèn)值是ISO, MDY,但是initdb將用對(duì)應(yīng)于選中的 lc_time區(qū)域行為的設(shè)置初始化配置文件。

IntervalStyle (enum)

設(shè)置間隔值的顯示格式。值sql_standard將產(chǎn)生匹配 SQL 標(biāo)準(zhǔn)間隔文本的輸出。當(dāng)?DateStyle?參數(shù)被設(shè)置為ISO時(shí),值postgres(默認(rèn))將產(chǎn)生匹配PostgreSQL發(fā)行 8.4 之前的輸出。當(dāng)DateStyle參數(shù)被設(shè)置為非ISO輸出時(shí),值postgres_verbose會(huì)產(chǎn)生匹配PostgreSQL發(fā)行 8.4 之前的輸出。值iso_8601會(huì)產(chǎn)生匹配在 ISO 8601 的 4.4.3.2 節(jié)中定義的帶標(biāo)志符格式的時(shí)間間隔的輸出。

IntervalStyle參數(shù)也可以影響對(duì)有歧義的間隔輸入的解釋。詳見(jiàn)第 8.5.4 節(jié)。

TimeZone (string)

設(shè)置用于顯示和解釋時(shí)間戳的時(shí)區(qū)。內(nèi)建默認(rèn)值是GMT,但是它通常會(huì)在postgresql.conf中被覆蓋;initdb將安裝一個(gè)對(duì)應(yīng)于其系統(tǒng)環(huán)境的設(shè)置。詳見(jiàn)第 8.5.3 節(jié)。

timezone_abbreviations (string)

設(shè)置服務(wù)器接受的日期時(shí)間輸入中使用的時(shí)區(qū)縮寫(xiě)集合。默認(rèn)值為'Default', 這個(gè)集合在全世界大多數(shù)地方都能工作。也還有'Australia''India',以及可能為一種特定安裝定義的其他集合。詳見(jiàn)第 B.4 節(jié)。

extra_float_digits (integer)

這個(gè)參數(shù)調(diào)整用于文本輸出浮點(diǎn)值的位數(shù),包括float4,float8以及幾何數(shù)據(jù)類(lèi)型。

如果值為1(默認(rèn)值)或更高,浮點(diǎn)值被輸出為最短-精度格式;參見(jiàn)第 8.1.3 節(jié)。 實(shí)際生成的位數(shù)只取決于輸出的值,而不取決于此參數(shù)的值。 float8 值最多需要 17 位數(shù)字,float4值最多需要9位數(shù)字。 這種格式既快速又精確,在正確讀取時(shí)精確地保留了原始的二進(jìn)制浮點(diǎn)值。為了歷史兼容性,允許的值最大為3。

如果值為零或負(fù),則輸出四舍五入為給定的十進(jìn)制精度。 使用的精度是根據(jù)此參數(shù)的值減小的類(lèi)型((FLT_DIGDBL_DIG,視情況而定)的標(biāo)準(zhǔn)位數(shù)。 (例如,指定 -1 將導(dǎo)致float4 值輸出四舍五入為 5 位有效數(shù)字,而float8值四舍五入為 14 位。) 此格式較慢,不會(huì)保留二進(jìn)制浮點(diǎn)值的所有位,但可能令人更易于閱讀。

注意

此參數(shù)的含義,以及其默認(rèn)值,在 PostgreSQL 12 中發(fā)生了變化; 參見(jiàn) 第 8.1.3 節(jié) 以便進(jìn)一步討論。

client_encoding (string)

設(shè)置客戶(hù)端編碼(字符集)。默認(rèn)使用數(shù)據(jù)庫(kù)編碼。PostgreSQL服務(wù)器所支持的字符集在第 23.3.1 節(jié)中描述。

lc_messages (string)

設(shè)置消息顯示的語(yǔ)言。可接受的值是系統(tǒng)相關(guān)的;詳見(jiàn)第 23.1 節(jié)。如果這個(gè)變量被設(shè)置為空字符串(默認(rèn)),那么該值將以一種系統(tǒng)相關(guān)的方式從服務(wù)器的執(zhí)行環(huán)境中繼承。

在一些系統(tǒng)上,這個(gè)區(qū)域分類(lèi)并不存在。仍然可以設(shè)置這個(gè)變量,只是不會(huì)有任何效果。同樣,所期望語(yǔ)言的翻譯消息也可能不存在。在這種情況下,你將仍然繼續(xù)看到英文消息。

只有超級(jí)用戶(hù)可以改變這個(gè)設(shè)置。因?yàn)樗瑫r(shí)影響發(fā)送到服務(wù)器日志和客戶(hù)端的消息。一個(gè)不正確的值可能會(huì)降低服務(wù)器日志的可讀性。

lc_monetary (string)

設(shè)置用于格式化貨幣量的區(qū)域,例如用to_char函數(shù)族??山邮艿闹凳窍到y(tǒng)相關(guān)的;詳見(jiàn)第 23.1 節(jié)。如果這個(gè)變量被設(shè)置為空字符串(默認(rèn)),那么該值將以一種系統(tǒng)相關(guān)的方式從服務(wù)器的執(zhí)行環(huán)境中繼承。

lc_numeric (string)

設(shè)置用于格式化數(shù)字的區(qū)域,例如用to_char函數(shù)族??山邮艿闹凳窍到y(tǒng)相關(guān)的;詳見(jiàn)第 23.1 節(jié)。如果這個(gè)變量被設(shè)置為空字符串(默認(rèn)),那么該值將以一種系統(tǒng)相關(guān)的方式從服務(wù)器的執(zhí)行環(huán)境中繼承。

lc_time (string)

設(shè)置用于格式化日期和時(shí)間的區(qū)域,例如用to_char函數(shù)族??山邮艿闹凳窍到y(tǒng)相關(guān)的;詳見(jiàn)第 23.1 節(jié)。如果這個(gè)變量被設(shè)置為空字符串(默認(rèn)),那么該值將以一種系統(tǒng)相關(guān)的方式從服務(wù)器的執(zhí)行環(huán)境中繼承。

default_text_search_config (string)

選擇被那些沒(méi)有顯式參數(shù)指定配置的文本搜索函數(shù)變體使用的文本搜索配置。詳見(jiàn)第 12 章。內(nèi)建默認(rèn)值是pg_catalog.simple,但是如果能夠標(biāo)識(shí)一個(gè)匹配區(qū)域的配置,initdb將用對(duì)應(yīng)于選中的 lc_ctype區(qū)域的設(shè)置初始化配置文件。

19.11.3. 共享庫(kù)預(yù)載入

為了載入附加的功能或者達(dá)到提高性能的目的,可用多個(gè)設(shè)置來(lái)預(yù)先載入共享庫(kù)到服務(wù)器中。 例如'$libdir/mylib'設(shè)置可能會(huì)導(dǎo)致mylib.so(或者某些平臺(tái)上的mylib.sl)從安裝的標(biāo)準(zhǔn)庫(kù)目錄被預(yù)裝載。這些設(shè)置之間的區(qū)別在于生效的時(shí)間以及改變它們所需的特權(quán)。

可以用這個(gè)方法預(yù)裝載PostgreSQL的過(guò)程語(yǔ)言庫(kù),通常是使用'$libdir/plXXX'語(yǔ)法,其中的XXXpgsql、perltclpython。

只有特別為與PostgreSQL一起使用設(shè)計(jì)的共享庫(kù)才能以這種方式載入。每一個(gè)PostgreSQL支持 的庫(kù)都有一個(gè)魔法塊,它會(huì)被檢查以保證兼容性。由于這個(gè)原因,非PostgreSQL無(wú)法 以這種方式被載入。你可能可以使用操作系統(tǒng)的工具(如LD_PRELOAD)載入它。

總之,請(qǐng)參考特定模塊的文檔來(lái)用推薦的方法載入它。

local_preload_libraries (string)

這個(gè)變量指定一個(gè)或者多個(gè)要在連接開(kāi)始時(shí)預(yù)載入的共享庫(kù)。它包含一個(gè)由逗號(hào)分隔的庫(kù)名列表,其中每個(gè)名稱(chēng)都會(huì)按LOAD命令的方式解析。項(xiàng)之間的空格會(huì)被忽略,如果需要在庫(kù)名中包含空格或者逗號(hào),請(qǐng)把庫(kù)名放在雙引號(hào)內(nèi)。這個(gè)參數(shù) 值只在連接開(kāi)始時(shí)生效。后續(xù)的更改不會(huì)有任何效果。如果一個(gè)指定的 庫(kù)沒(méi)有找到,連接嘗試將會(huì)失敗。

任何用戶(hù)都能設(shè)置這個(gè)選項(xiàng)。正因?yàn)槿绱耍鼙贿@樣載入的庫(kù)被嚴(yán)格限制為出現(xiàn)于安裝的標(biāo)準(zhǔn)庫(kù) 目錄中plugins子目錄下的共享庫(kù)(保證只有安全的庫(kù)被安裝到 這里是數(shù)據(jù)庫(kù)管理員的責(zé)任)。local_preload_libraries中的項(xiàng)可以顯式 指定這個(gè)目錄,例如 $libdir/plugins/mylib,或者只是指定庫(kù)的 名稱(chēng) — mylib$libdir/plugins/mylib的效果是相同的。

這個(gè)特性的目的是允許非特權(quán)用戶(hù)在特定的會(huì)話(huà)中載入正在調(diào)試的或者性能度量庫(kù), 而無(wú)需一個(gè)顯式的LOAD命令。為了這個(gè)目的,通常通過(guò)使用客 戶(hù)端的PGOPTIONS環(huán)境變量或者 ALTER ROLE SET來(lái)設(shè)置這個(gè)參數(shù)。

不過(guò),除非一個(gè)模塊被特別設(shè)計(jì)成由非超級(jí)用戶(hù)以這種方式使用,通常不推薦使用這個(gè)設(shè)置。應(yīng)該看看 ?session_preload_libraries?。

session_preload_libraries (string)

這個(gè)變量指定一個(gè)或者多個(gè)要在連接開(kāi)始時(shí)預(yù)載入的共享庫(kù)。只有超級(jí)用戶(hù)更夠更改這個(gè)設(shè)置。它包含一個(gè)由逗號(hào)分隔的庫(kù)名列表,其中每個(gè)名稱(chēng)都會(huì)按LOAD命令的方式解析。項(xiàng)之間的空格會(huì)被忽略,如果需要在庫(kù)名中包含空格或者逗號(hào),請(qǐng)把庫(kù)名放在雙引號(hào)內(nèi)。這個(gè)參數(shù)只在連接開(kāi)始時(shí)起效。后續(xù)的改變沒(méi)有效果。如果指定的庫(kù)沒(méi)有找到,連接嘗試將會(huì)失敗。只有超級(jí)用戶(hù)能夠更改這個(gè)設(shè)置。

這個(gè)特性的意圖是允許在特定會(huì)話(huà)中載入調(diào)試用的或者測(cè)量性能的庫(kù),而不需要顯式的給出一個(gè) LOAD命令。例如,通過(guò)用ALTER ROLE SET設(shè)置這個(gè)參數(shù)可以 為一個(gè)給定用戶(hù)名下的所有會(huì)話(huà)啟用auto_explain。還有,無(wú)需重啟 服務(wù)器就能更改這個(gè)參數(shù)(但是只有新會(huì)話(huà)啟動(dòng)時(shí)才會(huì)生效),這樣可以以這種方式更容易地增 加新模塊,即便它們會(huì)應(yīng)用到所有會(huì)話(huà)。

和?shared_preload_libraries?不同,相對(duì)于在庫(kù)被第一次使用 時(shí)載入它,在會(huì)話(huà)開(kāi)始時(shí)載入庫(kù)并沒(méi)有什么性能優(yōu)勢(shì)。不過(guò),當(dāng)使用連接池時(shí)這樣做還是有一些 優(yōu)勢(shì)。

shared_preload_libraries (string)

這個(gè)變量指定一個(gè)或者多個(gè)要在服務(wù)器啟動(dòng)時(shí)預(yù)載入的共享庫(kù)。它包含一個(gè)由逗號(hào)分隔的庫(kù)名列表,其中每個(gè)名稱(chēng)都會(huì)按LOAD命令的方式解析。項(xiàng)之間的空格會(huì)被忽略,如果需要在庫(kù)名中包含空格或者逗號(hào),請(qǐng)把庫(kù)名放在雙引號(hào)內(nèi)。這個(gè)參數(shù)只能在服務(wù)器啟動(dòng)時(shí)設(shè)置。如果指定的庫(kù)沒(méi)有找到,服務(wù)器將無(wú)法啟動(dòng)。

有些庫(kù)需要執(zhí)行只能在postmaster啟動(dòng)時(shí)發(fā)生的特定操作,例如分配共享內(nèi)存、保留輕量級(jí)鎖 或者啟動(dòng)后臺(tái)工作者。這些庫(kù)必須通過(guò)這個(gè)參數(shù)在服務(wù)器啟動(dòng)時(shí)載入。每個(gè)庫(kù)的詳情請(qǐng)見(jiàn)文檔。

其他庫(kù)也能被預(yù)載入。通過(guò)預(yù)載入一個(gè)共享庫(kù),當(dāng)該庫(kù)被第一次使用時(shí)就可以避免庫(kù)的啟動(dòng)時(shí)間。 不過(guò),啟動(dòng)每個(gè)新服務(wù)器進(jìn)程的時(shí)間可能會(huì)略有增加,即使該進(jìn)程從不使用該庫(kù)。因此,推薦只 把這個(gè)參數(shù)用于那些要在大多數(shù)會(huì)話(huà)中使用的庫(kù)上。還有,改變這個(gè)參數(shù)要求重啟服務(wù)器,因此 對(duì)于短期的調(diào)試任務(wù)來(lái)說(shuō)這不是好的選擇,應(yīng)該轉(zhuǎn)用 ?session_preload_libraries?。

注意

在 Windows 主機(jī)上,在服務(wù)器啟動(dòng)時(shí)預(yù)載入一個(gè)庫(kù)并不會(huì)減少啟動(dòng)每個(gè)新服務(wù)器進(jìn)程所需的 時(shí)間;每一個(gè)服務(wù)器進(jìn)程將會(huì)重新載入預(yù)載入的庫(kù)。不過(guò),對(duì)于那些要在postmaster啟動(dòng)時(shí) 執(zhí)行操作的庫(kù)來(lái)說(shuō),Windows 主機(jī)上的 shared_preload_libraries任然有用。

jit_provider (string)

這個(gè)變量是要被使用的JIT提供者庫(kù)的名稱(chēng)(見(jiàn)第 31.4.2 節(jié))。默認(rèn)是llvmjit。這個(gè)參數(shù)只能在服務(wù)器啟動(dòng)時(shí)設(shè)置。

如果這個(gè)變量被設(shè)置為一個(gè)不存在的庫(kù),JIT將不可用,但是也不會(huì)發(fā)生錯(cuò)誤。這種特性允許在主PostgreSQL包之外單獨(dú)安裝JIT支持。

19.11.4. 其他默認(rèn)值

dynamic_library_path (string)

如果需要打開(kāi)一個(gè)可以動(dòng)態(tài)裝載的模塊并且在CREATE FUNCTIONLOAD命令中指定的文件名沒(méi)有目錄部分(即名字中不包含斜線(xiàn)),那么系統(tǒng)將搜索這個(gè)路徑以查找所需的文件。

dynamic_library_path的值必須是一個(gè)冒號(hào)分隔(或者在 Windows 上以分號(hào)分隔)的絕對(duì)目錄路徑的列表。如果一個(gè)列表元素以特殊字符串開(kāi)始,$libdir會(huì)被替換為PostgreSQL包中已編譯好的庫(kù)目錄。這里是PostgreSQL發(fā)布提供的模塊被安裝的位置(使用 pg_config --pkglibdir來(lái)找到這個(gè)目錄的名字)。例如:

dynamic_library_path = '/usr/local/lib/postgresql:/home/my_project/lib:$libdir'

或者在 Windows 環(huán)境中:

dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'

這個(gè)參數(shù)的默認(rèn)值是'$libdir'。如果該值被設(shè)置為一個(gè)空字符串,則關(guān)閉自動(dòng)路徑搜索。

這個(gè)參數(shù)可以在運(yùn)行時(shí)由超級(jí)用戶(hù)修改,但是這樣修改的設(shè)置只能保持到這個(gè)客戶(hù)端連接的結(jié)尾,因此這個(gè)方法應(yīng)該保留給開(kāi)發(fā)目的。 我們建議在postgresql.conf配置文件中設(shè)置這個(gè)參數(shù)。

gin_fuzzy_search_limit (integer)

GIN 索引返回的集合尺寸的軟上限。詳見(jiàn)第 66.5 節(jié)。


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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)