Postgresql 中文操作指南

20.13. Version and Platform Compatibility #

20.13.1. Previous PostgreSQL Versions #

  • array_nulls (boolean) #

    • 这控制数组输入解析器是否将未引用的_NULL_识别为指定 null 数组元素。默认情况下,这是_on_,允许输入包含 null 值的数组值。但是,8.2 之前的 PostgreSQL 版本不支持数组中的 null 值,因此将 NULL 视为使用字符串值“NULL”指定常规数组元素。为了向后兼容需要旧行为的应用程序,可以将此变量变为_off_。

    • 请注意,即使此变量为_off_,也可能创建包含 null 值的数组值。

  • 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'…​' ) 受到支持。如果应用程序希望将反斜杠视为转义字符,则应使用转义字符串语法 ( Section 4.1.2.2 )。

  • synchronize_seqscans (boolean) #

    • 这允许同时对大表的扫描进行同步,以便并发扫描在大致相同的时间读取相同的块,从而共享 I/O 工作负载。当启用时,扫描可能会从表的中间开始,然后“环绕”结束来涵盖所有行,以便与已经进行的扫描的活动同步。这可能会导致没有 ORDER BY 子句的查询返回的行顺序发生不可预测的更改。将此参数设置为 off 确保先于 8.3 的行为,其中顺序扫描总是从表的开头开始。默认值为 on

20.13.2. Platform and Client Compatibility #

  • transform_null_equals (boolean) #

    • 启用后,格式为 expr = NULL_ (or NULL = _expr ) 的表达式将视为 expr IS NULL_, that is, they return true if expr evaluates to the null value, and false otherwise. The correct SQL-spec-compliant behavior of _ expr_ = NULL_ 是始终返回 null(未知)。因此,此参数默认为 off

    • 但是,Microsoft Access 中的筛选表单会生成看似总是使用 expr = NULL_ to test for null values, so if you use that interface to access the database you might want to turn this option on. Since expressions of the form _ expr_ = NULL_ 的查询来返回 null 值(使用 SQL 标准解释),它们并不是非常有用且不会经常出现在常规应用程序中,因此此选项在实践中几乎不会造成任何损害。但新用户经常会对涉及 null 值的表达式的语义感到困惑,因此此选项默认关闭。

    • 请注意,此选项仅影响确切形式 = NULL,而不是其他比较运算符或在计算上等效于涉及等于运算符的某些表达式的其他表达式(例如 IN)。因此,此选项不是不良编程的通用修复方法。

    • 有关相关信息,请参阅 Section 9.2