支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1

19.13. 版本與平台相容性 #

19.13.1. 舊版 PostgreSQL 版本 #

array_nulls (boolean) #

此設定控制陣列輸入剖析器是否將未引用的 NULL 識別為指定一個空的陣列元素。預設情況下,此設定為 on,允許輸入包含空值的陣列值。然而,8.2 之前的 PostgreSQL 版本不支援陣列中的空值,因此會將 NULL 視為指定一個具有字串值 NULL 的一般陣列元素。為了與需要舊行為的應用程式向後相容,可以將此變數設定為 off

請注意,即使此變數設定為 off,仍然可以建立包含空值的陣列值。

backslash_quote (enum) #

此設定控制是否可以在字串常值中使用 \' 來表示引號。表示引號的偏好方式、SQL 標準方式是將引號加倍 (''),但 PostgreSQL 在歷史上也接受 \'。但是,使用 \' 會產生安全性風險,因為在某些用戶端字元集編碼中,存在最後一個位元在數值上等同於 ASCII \ 的多位元組字元。如果用戶端程式碼進行不正確的逸出,則可能發生 SQL 注入攻擊。可以透過讓伺服器拒絕引號似乎被反斜線逸出的查詢來防止此風險。backslash_quote 的允許值為 on (始終允許 \')、off (始終拒絕) 和 safe_encoding (僅在用戶端編碼不允許 ASCII \ 存在於多位元組字元中時允許)。safe_encoding 是預設設定。

請注意,在符合標準的字串常值中,\ 僅表示 \。此參數僅影響非符合標準的常值,包括逸出字串語法 (E'...') 的處理。

escape_string_warning (boolean) #

當開啟時,如果反斜線 (\) 出現在普通字串常值 ('...' 語法) 中,且 standard_conforming_strings 設定為 off,則會發出警告。預設值為 on

希望使用反斜線作為逸出的應用程式應修改為使用逸出字串語法 (E'...'),因為根據 SQL 標準,普通字串的預設行為現在是將反斜線視為普通字元。可以啟用此變數以幫助找到需要變更的程式碼。

lo_compat_privileges (boolean) #

在 9.0 之前的 PostgreSQL 版本中,大型物件沒有存取權限,因此所有使用者始終可以讀取和寫入它們。將此變數設定為 on 會停用新的權限檢查,以便與先前的版本相容。預設值為 off。只有超級使用者和具有適當 SET 權限的使用者才能變更此設定。

設定此變數不會停用與大型物件相關的所有安全性檢查 — 僅停用 9.0 版的 PostgreSQL 中預設行為已變更的那些。

quote_all_identifiers (boolean) #

當資料庫產生 SQL 時,強制引用所有識別符,即使它們不是(目前)關鍵字。這會影響 EXPLAIN 的輸出,以及諸如 pg_get_viewdef 之類的函數的結果。另請參閱 pg_dumppg_dumpall--quote-all-identifiers 選項。

standard_conforming_strings (boolean) #

此設定控制普通字串文字 ('...') 是否按照 SQL 標準的方式,將反斜線視為字面符號。從 PostgreSQL 9.1 開始,預設值為 on (先前的版本預設為 off)。應用程式可以檢查此參數以確定字串文字的處理方式。此參數的存在也可以視為支援跳脫字串語法 (E'...') 的指標。如果應用程式希望將反斜線視為跳脫字元,則應使用跳脫字串語法 (第 4.1.2.2 節)。

synchronize_seqscans (boolean) #

此設定允許大型資料表的循序掃描彼此同步,以便併發的掃描在大約相同的時間讀取相同的區塊,從而分攤 I/O 工作負載。啟用此功能後,掃描可能會從資料表的中間開始,然後環繞到末尾以涵蓋所有列,從而與已在進行中的掃描活動同步。這可能會導致沒有 ORDER BY 子句的查詢傳回的列排序出現不可預測的變化。將此參數設定為 off 可確保 8.3 之前的行為,其中循序掃描始終從資料表的開頭開始。預設值為 on

19.13.2. 平台與客戶端相容性 #

transform_null_equals (boolean) #

啟用時,expr = NULL (或 NULL = expr) 形式的運算式會被視為 expr IS NULL,也就是說,如果 expr 評估為 null 值,則傳回 true,否則傳回 false。expr = NULL 正確且符合 SQL 規範的行為應始終傳回 null(未知)。因此,此參數預設為 off

但是,Microsoft Access 中的過濾表單產生的查詢似乎使用 expr = NULL 來測試 null 值,因此如果您使用該介面存取資料庫,您可能需要啟用此選項。由於 expr = NULL 形式的運算式始終傳回 null 值(使用 SQL 標準解釋),因此它們不是很有用,並且在普通應用程式中很少出現,因此實際上此選項沒有太大危害。但是,新使用者經常對涉及 null 值的運算式的語義感到困惑,因此預設情況下此選項處於關閉狀態。

請注意,此選項僅影響 = NULL 的精確形式,不影響其他比較運算子或在計算上等同於涉及等號運算子的某個運算式的其他運算式(例如 IN)。因此,此選項不是修正不良程式設計的通用方法。

有關相關資訊,請參閱第 9.2 節

allow_alter_system (boolean) #

allow_alter_system 設定為 off 時,如果執行 ALTER SYSTEM 命令,則會傳回錯誤。此參數只能在 postgresql.conf 檔案或伺服器命令列中設定。預設值為 on

請注意,此設定不應被視為安全性功能。它只會停用 ALTER SYSTEM 命令。它不會阻止超級使用者使用其他 SQL 命令來變更組態。超級使用者有很多方法可以在作業系統層級執行 shell 命令,因此可以修改 postgresql.auto.conf,而不管此設定的值如何。

關閉此設定適用於 PostgreSQL 的組態由某些外部工具管理的環境。在這樣的環境中,善意的超級使用者可能會錯誤地使用 ALTER SYSTEM 來變更組態,而不是使用外部工具。這可能會導致意外的行為,例如外部工具在稍後更新組態時覆蓋變更。將此參數設定為 off 可以幫助避免此類錯誤。

此參數僅控制 ALTER SYSTEM 的使用。postgresql.auto.conf 中儲存的設定即使 allow_alter_system 設定為 off 仍然有效。

提交更正

如果您在文件中發現任何不正確、與特定功能的使用體驗不符或需要進一步說明的內容,請使用此表單來回報文件問題。