支援的版本:目前 (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 關閉,則會發出警告。預設值為 on

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

lo_compat_privileges (boolean) #

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

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

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)。應用程式可以檢查此參數,以確定字串文字的處理方式。此參數的存在也可以作為 escape 字串語法(E'...')受到支援的指標。如果應用程式希望將反斜線視為跳脫字元,則應使用 escape 字串語法(Section 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)。因此,此選項不是解決不良程式設計的通用方法。

有關相關資訊,請參閱 Section 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 的使用。即使 allow_alter_system 設定為 off,儲存在 postgresql.auto.conf 中的設定也會生效。

提交更正

如果您在文件中看到任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的內容,請使用此表單回報文件問題。