支持的版本:当前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 为关闭状态,则会发出警告。默认值为 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。expr = NULL 的正确 SQL 规范兼容行为是始终返回 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 中的设置也会生效。

提交更正

如果您在文档中看到任何不正确、与您使用特定功能的体验不符或需要进一步澄清的地方,请使用此表单来报告文档问题。