支持的版本:当前 (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 设置为 off,则会发出警告。默认值为 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)。应用程序可以检查此参数以确定如何处理字符串文字。此参数的存在也可以被视为支持转义字符串语法 (E'...') 的标志。如果应用程序希望将反斜杠视为转义字符,则应使用转义字符串语法(第 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 的计算结果为空值,则返回 true,否则返回 false。 按照 SQL 规范,expr = NULL 的正确行为是始终返回 null(未知)。 因此,此参数默认为 off

但是,Microsoft Access 中的筛选形式生成的查询似乎使用 expr = NULL 来测试空值,因此,如果您使用该接口访问数据库,您可能希望启用此选项。 由于形如 expr = NULL 的表达式总是返回空值(使用 SQL 标准解释),因此它们不是很有用,并且在普通应用程序中不常出现,因此在实践中此选项几乎没有害处。但是,新用户经常对涉及空值的表达式的语义感到困惑,因此默认情况下此选项处于关闭状态。

请注意,此选项仅影响 = 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 中的设置也会生效。

提交更正

如果您在文档中发现任何不正确、与您使用特定功能的经验不符或需要进一步澄清的内容,请使用此表格报告文档问题。