20.13 版本和平台兼容性#
20.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_dump 和 pg_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。
20.13.2. 平台和客户端兼容性#
transform_null_equals(boolean) #启用时,形式为
(或expr= NULLNULL =)的表达式将被视为expr,即如果exprIS NULLexpr求值为 null 值,则返回 true,否则返回 false。SQL 规范兼容的的正确行为始终返回 null(未知)。因此,此参数默认为expr= NULLoff。但是,Microsoft Access 中的筛选表单会生成似乎使用
来测试 null 值的查询,因此如果你使用该界面访问数据库,你可能希望启用此选项。由于形式为expr= NULL的表达式始终返回 null 值(使用 SQL 标准解释),因此它们并不是非常有用,并且在正常应用程序中并不常见,因此此选项在实践中几乎没有危害。但是,新用户经常对涉及 null 值的表达式的语义感到困惑,因此此选项默认关闭。expr= NULL请注意,此选项仅影响确切形式
= NULL,不影响其他比较运算符或在计算上等效于涉及等号运算符的某些表达式的其他表达式(例如IN)。因此,此选项并不是针对错误编程的通用修复程序。有关相关信息,请参阅第 9.2 节。
