2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 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,允許輸入包含空值的陣列。然而,在 PostgreSQL 8.2 之前的版本不支援陣列中的空值,因此會將 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) #

當設定為 on 時,如果普通字串字面量 ('...' 語法) 中出現反斜槓 (\) 且 standard_conforming_stringsoff,則會發出警告。預設為 on

希望使用反斜槓作為轉義符的應用程式應修改為使用跳脫字元串語法 (E'...'),因為根據 SQL 標準,普通字串的預設行為是將其作為普通字元處理。可以啟用此變數來幫助定位需要更改的程式碼。

lo_compat_privileges (boolean) #

在 PostgreSQL 9.0 之前的版本中,大物件沒有訪問許可權,因此所有使用者都可以隨時讀取和寫入。將此變數設定為 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)。應用程式可以檢查此引數以確定字串字面量將如何被處理。此引數的存在也表明支援跳脫字元串語法 (E'...')。如果應用程式希望將反斜槓用作跳脫字元,則應使用跳脫字元串語法(第 4.1.2.2 節)。

synchronize_seqscans (boolean) #

這允許大表的順序掃描同步,以便併發掃描在大致相同的時間讀取相同的塊,從而共享 I/O 工作負載。啟用此選項後,掃描可能會從表的中間開始,然後“環繞”到末尾以覆蓋所有行,以便與正在進行的掃描活動同步。這可能導致在沒有 ORDER BY 子句的查詢返回的行順序發生不可預測的變化。將此引數設定為 off 可確保 8.3 之前的行為,即順序掃描始終從表開頭開始。預設為 on

19.13.2. 平臺和客戶端相容性 #

transform_null_equals (boolean) #

當設定為 on 時,形式為 expr = NULL(或 NULL = expr)的表示式將被視為 expr IS NULL,也就是說,如果 expr 計算結果為空值,則返回 true,否則返回 false。 expr = NULL 符合 SQL 標準的行為是始終返回 null(未知)。因此,此引數預設為 off

然而,Microsoft Access 中的過濾形式會生成似乎使用 expr = NULL 來測試空值的查詢,因此如果您透過該介面訪問資料庫,可能希望將此選項設定為 on。由於形式為 expr = 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 的使用。即使 allow_alter_system 設定為 off,儲存在 postgresql.auto.conf 中的設定仍然會生效。

提交更正

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