2024年9月26日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 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 计算结果为 null 值,则返回 true,否则返回 false。 expr = NULL 的正确符合 SQL 规范的行为是始终返回 null(未知)。因此,此参数默认为 off

但是,Microsoft Access 中的过滤表单生成的查询似乎使用 expr = NULL 来测试空值,因此,如果您使用该接口访问数据库,则可能希望将此选项打开。由于表单 expr = NULL 的表达式始终返回 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 中的设置也会生效。

提交更正

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