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) #打开时,如果在普通字符串字面量中(
'...'语法)出现了一个反斜线(\)并且standard_conforming_strings为关闭,那么就会发出一个警告。默认值是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_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。
19.13.2. 平台和客户端兼容性 #
transform_null_equals(boolean) #当打开时,形如
(或expr= NULLNULL =)的表达式将被当做expr,也就是说,如果exprIS NULLexpr计算结果为空值则返回真,否则返回假。正确的 SQL 标准兼容的行为总是返回空值(未知)。因此这个参数默认为expr= NULLoff。不过,在 Microsoft Access 里的过滤表单生成的查询似乎使用
来测试空值,因此,如果你使用这个接口访问数据库,你可能想把这个选项打开。因为expr= NULL形式的表达式总是返回空值(使用 SQL 标准解释),它们不是非常有用并且在普通应用中也不常见,因此这个选项实际上没有什么危害。但是新用户常常对涉及空值的表达式语义感到困惑,因此这个选项默认为关闭。expr= 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中的设置仍然会生效。
报告文档问题
阅读 上游文档. 通过 PostgreSQL 文档反馈表单.