On this page
19.13. 版本和平台兼容性
19 .13.1. 先前的 PostgreSQL 版本
array_nulls
(boolean
)- 这控制着数组 Importing 解析器是否将未引号
NULL
识别为指定空数组元素。默认情况下,该值为on
,允许 Importing 包含空值的数组值。但是,PostgreSQL 8.2 之前的版本不支持数组中的空值,因此会将NULL
视为使用字符串值“ NULL”指定普通数组元素。为了与需要旧行为的应用程序向后兼容,可以将此变量设置为off
。
- 这控制着数组 Importing 解析器是否将未引号
请注意,即使此变量为off
,也可以创建包含空值的数组值。
backslash_quote
(enum
)- 这控制着引号是否可以由字符串 Literals 中的
\'
表示。表示引号的首选 SQL 标准方法是将其加倍(''
),但是 PostgreSQL 历史上也接受\'
。但是,使用\'
会带来安全风险,因为在某些 Client 端字符集编码中,存在多字节字符,其中最后一个字节在数值上与 ASCII\
等价。如果 Client 端代码确实错误转义,则可能会发生 SQL 注入攻击。通过使服务器拒绝其中引号似乎被反斜杠转义的查询,可以避免这种风险。backslash_quote
的允许值为on
(始终允许\'
),off
(始终拒绝)和safe_encoding
(仅当 Client 端编码不允许多字节字符内的 ASCII\
时允许)。safe_encoding
是默认设置。
- 这控制着引号是否可以由字符串 Literals 中的
请注意,在符合标准的字符串 Literals 中,\
始终表示\
。此参数仅影响对不符合标准的 Literals 的处理,包括转义字符串语法(E'...'
)。
default_with_oids
(boolean
)- 如果未指定
WITH OIDS
或WITHOUT OIDS
,则此参数控制CREATE TABLE
和CREATE TABLE AS
是否在新创建的表中包括 OID 列。它还确定 OID 是否将包含在SELECT INTO
创建的表中。参数默认为off
;在 PostgreSQL 8.0 和更早的版本中,默认为on
。
- 如果未指定
不建议在用户表中使用 OID,因此大多数安装应禁用此变量。需要特定表的 OID 的应用程序在创建表时应指定WITH OIDS
。可以启用此变量以与不遵循此行为的旧应用程序兼容。
escape_string_warning
(boolean
)- 启用时,如果普通字符串 Literals(
'...'
语法)中出现反斜杠(\
)并且standard_conforming_strings
处于关闭状态,则会发出警告。默认值为on
。
- 启用时,如果普通字符串 Literals(
希望将反斜杠用作转义的应用程序应修改为使用转义字符串语法(E'...'
),因为根据 SQL 标准,普通字符串的默认行为现在是将反斜杠视为普通字符。可以启用此变量来帮助查找需要更改的代码。
lo_compat_privileges
(boolean
)- 在 9.0 之前的 PostgreSQL 版本中,大对象没有访问权限,因此,所有用户始终可以读取和写入。将此变量设置为
on
将禁用新的特权检查,以与以前的版本兼容。默认值为off
。只有超级用户可以更改此设置。
- 在 9.0 之前的 PostgreSQL 版本中,大对象没有访问权限,因此,所有用户始终可以读取和写入。将此变量设置为
设置此变量不会禁用与大对象相关的所有安全检查,仅禁用那些默认行为在 PostgreSQL 9.0 中已更改的安全检查。
operator_precedence_warning
(boolean
)- 启用后,解析器将针对自 PostgreSQL 9.4 起由于运算符优先级更改而可能含义发生变化的任何构造发出警告。这对于审核应用程序以查看优先级更改是否破坏了任何内容很有用;但是它并不意味着在 Producing 保持打开状态,因为它会警告一些完全有效,符合标准的 SQL 代码。默认值为
off
。
- 启用后,解析器将针对自 PostgreSQL 9.4 起由于运算符优先级更改而可能含义发生变化的任何构造发出警告。这对于审核应用程序以查看优先级更改是否破坏了任何内容很有用;但是它并不意味着在 Producing 保持打开状态,因为它会警告一些完全有效,符合标准的 SQL 代码。默认值为
有关更多信息,请参见Section 4.1.6。
quote_all_identifiers
(boolean
)- 当数据库生成 SQL 时,即使不是(当前)关键字,也要强制所有标识符加引号。这将影响
EXPLAIN
的输出以及pg_get_viewdef
之类的函数的结果。另请参见pg_dump和pg_dumpall的--quote-all-identifiers
选项。
- 当数据库生成 SQL 时,即使不是(当前)关键字,也要强制所有标识符加引号。这将影响
standard_conforming_strings
(boolean
)- 这可以控制普通字符串 Literals(
'...'
)是否按照 SQL 标准指定的方式按字面对待反斜杠。从 PostgreSQL 9.1 开始,默认值为on
(以前的版本默认为off
)。应用程序可以检查此参数以确定如何处理字符串 Literals。此参数的存在也可以用作表明支持转义字符串语法(E'...'
)。如果应用程序希望将反斜杠视为转义字符,则应使用转义字符串语法(Section 4.1.2.2)。
- 这可以控制普通字符串 Literals(
synchronize_seqscans
(boolean
)- 这允许对大型表进行 Sequences 扫描以使其彼此同步,从而使并发扫描大约在同一时间读取同一块,从而分担了 I/O 工作量。启用此功能后,扫描可能会从表的中间开始,然后“绕回”末端以覆盖所有行,以便与正在进行的扫描活动保持同步。这可能会导致没有
ORDER BY
子句的查询返回的行 Sequences 发生不可预测的变化。将此参数设置为off
可确保 8.3 版之前的行为始终从表的开头开始进行 Sequences 扫描。默认值为on
。
- 这允许对大型表进行 Sequences 扫描以使其彼此同步,从而使并发扫描大约在同一时间读取同一块,从而分担了 I/O 工作量。启用此功能后,扫描可能会从表的中间开始,然后“绕回”末端以覆盖所有行,以便与正在进行的扫描活动保持同步。这可能会导致没有
19 .13.2. 平台和 Client 端兼容性
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
,而不影响其他比较运算符或与包含 equals 运算符的某些表达式在计算上等效的其他表达式(例如IN
)。因此,此选项不是错误编程的一般解决方案。
有关相关信息,请参阅Section 9.2。