2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 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,允许输入包含空值的数组。然而,在 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) #

当设置为 on 时,如果普通字符串字面量 ('...' 语法) 中出现反斜杠 (\) 且 standard_conforming_stringsoff,则会发出警告。默认为 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_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) #

当设置为 on 时,形式为 expr = NULL(或 NULL = expr)的表达式将被视为 expr IS NULL,也就是说,如果 expr 计算结果为空值,则返回 true,否则返回 false。 expr = NULL 符合 SQL 标准的行为是始终返回 null(未知)。因此,此参数默认为 off

然而,Microsoft Access 中的过滤形式会生成似乎使用 expr = NULL 来测试空值的查询,因此如果您通过该接口访问数据库,可能希望将此选项设置为 on。由于形式为 expr = NULL 的表达式(使用 SQL 标准的解释)总是返回 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 中的设置仍然会生效。

提交更正

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