专栏首页cwl_Java数据库PostrageSQL-版本和平台兼容性

数据库PostrageSQL-版本和平台兼容性

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’…’)。

default_with_oids (boolean) 这个参数控制CREATE TABLE和CREATE TABLE AS在既没有指定WITH OIDS也没有指定WITHOUT OIDS的情况下,是否在新创建的表中包含 OID 列。它还决定被SELECT INTO创建的表里面是否包含 OID 。这个参数在默认情况下为off。在PostgreSQL 8.0 及更早的版本中,它默认为on。

我们反对在用户表中使用 OID ,因此大多数安装应该禁用这个变量。需要为一个特殊表使用 OID 的应用应该在创建表的时候指定WITH OIDS。为了兼容不遵循这一行为的老旧应用,这个变量可以被启用。

escape_string_warning (boolean) 打开时,如果在普通字符串文本中(’…'语法)出现了 一个反斜线(\)并且standard_conforming_strings为关闭,那么就会发出一个警告。默认值是on。

希望使用反斜线作为转义符的应用应该被修改来使用转义字符串语法(E’…’),因为在 SQL 标准中普通字符串的默认行为是将反斜线视作一个普通字符。这个变量可以被启用来帮助定位需要被更改的代码。

lo_compat_privileges (boolean) 在PostgreSQL 9.0 之前,大对象不具有访问特权并且因此总是所有用户可读可写的。为了和以前的版本兼容,把这个变量设置为on可以禁用这种新的特权检查。默认是off。只有超级用户可以更改这个设置。

设置这个参数不会禁用所有与大对象相关的安全检查 — 除了那些在PostgreSQL 9.0中已经修改了的默认行为。

operator_precedence_warning (boolean) 当开启时,对于任何从PostgreSQL 9.4 以来由于操作符优先级 变化而导致含义改变的结构,解析器将发出一个警告。这有助于审计应用,已检查是否 优先级变化破坏了什么东西。但是它的本意并不是希望在生产环境中保持打开,因为它 会对某些完全合法、兼容标准的 SQL 代码发出警告。默认为off。更多信息请见Section 4.1.6。

quote_all_identifiers (boolean) 当数据库产生 SQL 时,强制所有标识符被引号包围,即使它们(当前)不是关键字。这将影响EXPLAIN的输出以及pg_get_viewdef等函数的结果。另请参阅pg_dumppg_dumpall--quote-all-identifiers选项。standard_conforming_strings (boolean)

控制普通字符串文本(’…’)是否按照 SQL 标准把反斜线当普通文本。从PostgreSQL9.1 开始,默认值为on(之前的发行中默认值为off)。应用可以检查这个参数来判断字符串文本如何被处理。这个参数的存在也可以被当做转义字符串语法(E’…’)被支持的标志。如果一个应用希望反斜线被当做转义字符,应该使用转义字符串语法(Section 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得出空值值则返回真,否则返回假。正确的 SQL 标准兼容的expr = NULL行为总是返回空(未知)。因此这个参数默认为off。

不过,在Microsoft Access里的过滤表单生成的查询似乎使用expr = NULL来测试空值,因此,如果你使用这个接口访问数据库,你可能想把这个选项打开。因为expr = NULL形式的表达式总是返回空值(使用 SQL 标准解释)。它们不是非常有用并且在普通应用中也不常见,在应用中也不常见,因此这个选项实际上没有什么危害。但是新用户常常对涉及空值的表达式的语义上感到困惑,因此这个选项默认为关闭。

请注意这个选项只影响= NULL形式,而不影响其它比较操作符或者其它与一些涉及等值操作符的表达式在计算上等效的其他表达式(例如IN)。因此,这个选项不是劣质程序的一般修复。相关信息请见Section 9.2。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 快速学习ES6新特性-l字符串扩展

    cwl_java
  • 快速学习-Python字符串(String)

    Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。

    cwl_java
  • 快速学习FreeMarker-FreeMarker简介

    FreeMarker 是一款模板引擎:一种基于模板的、用来生成输出文本(任何来自于 HTML格式的文本用来自动生成源代码)的通用工具。它是为 Java 程序员提...

    cwl_java
  • 字符串专题思维导图

    接下来,中间穿插着总结过往推送的十一篇专题,主要以思维导图的形式,直观、高效的展示。文字版结合思维导图,希望大家能更加高效的入门Python.

    double
  • 字符串留用与字符串池

    字符串相等性检查是应用程序常见的操作,于此同时,这也是一种严重损害性能的操作.执行序号(字符串的二进制)相等行检查时,CLR会进行以下操作:

    郑小超.
  • Python 基础语法三-字符串

    字符串是字符的有序序列,在 python 中字符串是以单引号'、双引号"或三引号'''括起来的任意文本。

    keinYe
  • 基于Docker的Redis高可用集群搭建(redis-sentinel)

      之前介绍了用docker来搭建redis主从环境,但这只是对数据添加了从库备份(主从复制),当主库down掉的时候,从库是不会自动升级为主库的,也就是说,该...

    happyJared
  • python字符串总结

    格式 描述 格式 描述 %% 百分号%标记(多出来的%是转义作用)     %c 字符及其ASCII码 %s 字符串 %d 有符号整数(十进制) %u 无符号整...

    用户7886150
  • 跟Cell editor学做scientific presentation (25个判断标准,18个不能做,8个建议)

    再多建议归根结底就是一句话:做事用心。想明白要表达什么,表达是不是清晰,表达是不是简洁,表达有无错误, 就可以了。下面的25个判断标准,18个不能做,8个建议是...

    生信宝典
  • PHP字符串

    htmlspecialchars()函数将会把一个字符串按照HTML实体输出(可以将字符串中特殊含义的字符转译为HTML实体)

    Mirror王宇阳

扫码关注云+社区

领取腾讯云代金券