PostgreSQL 版本和平臺兼容性

2021-08-31 14:32 更新
19.13.1. 以前的 PostgreSQL 版本
19.13.2. 平臺和客戶端兼容性

19.13.1. 以前的 PostgreSQL 版本

array_nulls (boolean)

這個參數(shù)控制數(shù)組輸入解析器是否把未用引號的NULL識別為一個空數(shù)組元素。默認為on,允許輸入包含空值的數(shù)組值。但是PostgreSQL 8.2 之前的版本不支持數(shù)組中的空值,并且因此將把NULL當(dāng)作指定一個值為字符串NULL的正常數(shù)組元素。對于那些要求舊行為的應(yīng)用的向后兼容性,這個變量可以被設(shè)置為 off。

注意即使這個變量為off也能夠創(chuàng)建包含空值的數(shù)組值。

backslash_quote (enum)

這個參數(shù)控制字符串文本中的單引號是否能夠用\'來表示。首選的 SQL 標準的方法是將其雙寫(''),但是PostgreSQL在歷史上也接受\'。不過使用\'容易導(dǎo)致安全風(fēng)險,因為在某些客戶端字符集編碼中,有多字節(jié)字符的最后一個字節(jié)在數(shù)值上等價于 ASCII 的\'。如果客戶端代碼沒有做到正確轉(zhuǎn)義,那么將會導(dǎo)致 SQL 注入攻擊。如果服務(wù)器拒絕看起來帶有被反斜線轉(zhuǎn)義的單引號的查詢,那么就可以避免這種風(fēng)險。backslash_quote的可用值是on(總是允許\')、off(總是拒絕)以及 safe_encoding(只有客戶端編碼不允許在多字節(jié)字符中存在 ASCII \時允許)。safe_encoding是默認設(shè)置。

注意在符合標準的字符串文本中,\就表示\。這個參數(shù)只影響不符合標準的文本的處理,包括轉(zhuǎn)義字符串語法(E'...')。

escape_string_warning (boolean)

打開時,如果在普通字符串文本中('...'語法)出現(xiàn)了 一個反斜線(\)并且standard_conforming_strings為關(guān)閉,那么就會發(fā)出一個警告。默認值是on。

希望使用反斜線作為轉(zhuǎn)義符的應(yīng)用應(yīng)該被修改來使用轉(zhuǎn)義字符串語法(E'...'),因為在 SQL 標準中普通字符串的默認行為是將反斜線視作一個普通字符。這個變量可以被啟用來幫助定位需要被更改的代碼。

lo_compat_privileges (boolean)

PostgreSQL 9.0 之前,大對象不具有訪問特權(quán)并且因此總是所有用戶可讀可寫的。為了和以前的版本兼容,把這個變量設(shè)置為on可以禁用這種新的特權(quán)檢查。默認是off。只有超級用戶可以更改這個設(shè)置。

設(shè)置這個參數(shù)不會禁用所有與大對象相關(guān)的安全檢查 — 除了那些在PostgreSQL 9.0中已經(jīng)修改了的默認行為。

operator_precedence_warning (boolean)

當(dāng)開啟時,對于任何從PostgreSQL 9.4 以來由于操作符優(yōu)先級 變化而導(dǎo)致含義改變的結(jié)構(gòu),解析器將發(fā)出一個警告。這有助于審計應(yīng)用,已檢查是否 優(yōu)先級變化破壞了什么東西。但是它的本意并不是希望在生產(chǎn)環(huán)境中保持打開,因為它 會對某些完全合法、兼容標準的 SQL 代碼發(fā)出警告。默認為off。

更多信息請見第 4.1.6 節(jié)

quote_all_identifiers (boolean)

當(dāng)數(shù)據(jù)庫產(chǎn)生 SQL 時,強制所有標識符被引號包圍,即使它們(當(dāng)前)不是關(guān)鍵字。這將影響EXPLAIN的輸出以及pg_get_viewdef等函數(shù)的結(jié)果。另請參閱pg_dumppg_dumpall--quote-all-identifiers選項。

standard_conforming_strings (boolean)

控制普通字符串文本('...')是否按照 SQL 標準把反斜線當(dāng)普通文本。從PostgreSQL 9.1 開始,默認值為on(之前的發(fā)行中默認值為off)。應(yīng)用可以檢查這個參數(shù)來判斷字符串文本如何被處理。這個參數(shù)的存在也可以被當(dāng)做轉(zhuǎn)義字符串語法(E'...')被支持的標志。如果一個應(yīng)用希望反斜線被當(dāng)做轉(zhuǎn)義字符,應(yīng)該使用轉(zhuǎn)義字符串語法( 第 4.1.2.2 節(jié))。

synchronize_seqscans (boolean)

它允許對大型表的順序掃描與其他掃描同步,因此并發(fā)掃描可以在幾乎相同的時刻讀取相同的塊,這樣可以分擔(dān) I/O 負載。當(dāng)啟用這個參數(shù)時,一個掃描可能會從表的中間開始并且之后繞回到開頭以覆蓋所有的行,這樣可以與已在進行中的掃描活動同步。對于沒有ORDER BY子句的查詢來,這樣的掃描會在返回行的順序中造成不可預(yù)料的改變。將這個參數(shù)設(shè)置為 off以保證 8.3 之前的行為(順序掃描總是從表的起始處開始)。默認值是on

19.13.2. 平臺和客戶端兼容性

transform_null_equals (boolean)

當(dāng)打開時,形為expr = NULL(或NULL = expr )的表達式將被當(dāng)做expr IS NULL, 也就是說,如果expr得出空值值則返回真,否則返回假。正確的 SQL 標準兼容的expr = NULL行為總是返回空(未知)。因此這個參數(shù)默認為off。

不過,在Microsoft Access里的過濾表單生成的查詢似乎使用expr = NULL來測試空值,因此,如果你使用這個接口訪問數(shù)據(jù)庫,你可能想把這個選項打開。因為expr = NULL形式的表達式總是返回空值(使用 SQL 標準解釋)。它們不是非常有用并且在普通應(yīng)用中也不常見,在應(yīng)用中也不常見,因此這個選項實際上沒有什么危害。但是新用戶常常對涉及 空值的表達式的語義上感到困惑,因此這個選項默認為關(guān)閉。

請注意這個選項只影響= NULL形式,而不影響其它比較操作符或者其它與一些涉及等值操作符的表達式在計算上等效的其他表達式(例如IN)。因此,這個選項不是劣質(zhì)程序的一般修復(fù)。

相關(guān)信息請見第 9.2 節(jié)。


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號