发布日期:. 2016-08-11
这个版本包含各种自9.1.22以来的修复。 关于9.1主版本的新特性信息,请查看 第 E.107 节。
PostgreSQL社区将在2016年9月停止发布9.1.X版本系列的更新。 建议用户尽快更新到一个较新的版本分支。
修复嵌套的CASE
-WHEN
表达式可能的错误估算 (Heikki
Linnakangas, Michael Paquier, Tom Lane)
出现在另一个CASE
的测试值子表达式中的CASE
表达式可能会困惑自己的测试值是否为空。此外,
CASE
表达式使用的实现等式运算符的SQL函数的内联,
可能会导致将错误的测试值传递给在SQL函数体内的CASE
表达式中调用的函数。如果测试值是不同的数据类型,可能会导致崩溃;
此外,这种情况可能被滥用以允许披露服务器存储器的一部分。 (CVE-2016-5423)
修复客户端程序在数据库和角色名称中对特殊字符的处理 (Noah Misch, Nathan Bossart, Michael Paquier)
vacuumdb 和其他客户端程序中的许多地方可能会被包含双引号或反斜杠的数据库和角色名称混淆。 加强引用规则以使其是安全的。此外,确保将conninfo字符串用作这些程序的数据库名称参数时, 它将被正确地对待。
修正在psql的\connect
和\password
命令中配对双引号的处理,以匹配文档。
在psql的\connect
命令中引入一个新的
-reuse-previous
选项,以允许显式控制是否重新使用先前连接的连接参数。
(没有这个选择是基于数据库名称是否像以前一样是conninfo字符串。)
这允许在pg_dumpall脚本中安全处理包含特殊字符的数据库名称。
pg_dumpall现在拒绝处理包含回车或换行的数据库或角色名, 因为在Windows上安全的引用这些字符似乎是不切实际的。 将来我们可能在服务器端拒绝这样的名称,但是现在还未采取这一步骤。
这些被认为是安全修复程序, 因为包含特殊字符的制作对象名称可能已被用于在下次超级用户执行 pg_dumpall或其他例行维护操作时执行具有超级用户权限的命令。 (CVE-2016-5424)
修复针对IS NULL
/IS NOT
NULL
应用于嵌套复合值的极端情况错误行为 (Andrew Gierth, Tom Lane)
SQL标准指定IS NULL
应该为所有空值的行返回TRUE(因此
ROW(NULL,NULL) IS NULL
产生TRUE),但这并不意味着应用递归
(因此ROW(NULL, ROW(NULL,NULL)) IS NULL
产生FALSE)。
内核执行器正确执行了,但某些计划器优化将测试视为递归
(因此在这两种情况下都会产生TRUE),并且contrib/postgres_fdw
可能会产生类似错误的远程查询。
使inet
和cidr
数据类型正确拒绝具有太多冒号分隔字段的IPv6地址 (Tom Lane)
防止NaN输入坐标的close_ps()
中的崩溃
(point
##
lseg
操作符)
(Tom Lane)
使其返回NULL而不是崩溃。
修复to_number()
中的几个单字节缓冲区溢出
(Peter Eisentraut)
在某些情况下to_number()
函数将从输入字符串中多读取一个字符。
如果输入恰好与内存的结束相邻,那么会有可能崩溃。
通过heap_update()
在昂贵的路径中避免不安全的中间状态
(Masahiko Sawada, Andres Freund)
以前,这些情况锁定了目标元组(通过设置其XMAX),但没有WAL-log这个操作, 因此如果页面溢出到磁盘,然后在元组更新完成之前发生数据库崩溃, 就会有数据完整性问题的风险。
避免在VACUUM
期间使用事务ID
(Alexander Korotkov)
VACUUM
中的某些情况不必要地导致将XID分配给当前事务。
通常这是可以忽略不计的,但如果是针对XID环绕限制,
在反包装清理中消耗更多的XID是一件非常糟糕的事情。
避免在VACUUM FREEZE
期间取消热备用查询
(Simon Riggs, Álvaro Herrera)
在空闲的主服务器上的VACUUM FREEZE
可能导致在其备用服务器上不必要地取消查询。
当手动ANALYZE
指定列列表时,请不要重置表的
changes_since_analyze
计数器 (Tom Lane)
如果我们只是分析一些列,我们不应该阻止对其他列的日常自动分析。
修复ANALYZE
对具有许多空条目的唯一或几乎唯一的列进行过高估计
n_distinct
(Tom Lane)
空值可以被计数就像它们本身是不同的值,导致在某些类型的查询中严重的规划器错误估计。
防止autovacuum启动为同一个共享目录的多个工作进程 (Álvaro Herrera)
通常这不是很大的问题,因为清理不需要很长时间;但是在目录严重膨胀的情况下, 除了一个工作进程外,所有工作进程都将无用地等待,而不是在其他表格上进行有用的工作。
修复contrib/btree_gin
,以正确处理最小可能的
bigint
值 (Peter Eisentraut)
教会libpq正确解码未来服务器的服务器版本 (Peter Eisentraut)
计划在9.6之后的版本切换到两部分而不是三部分服务器版本号。确保
PQserverVersion()
为这种情况返回正确的值。
修复ecpg为unsigned long long
数组元素的编码 (Michael Meskes)
让pg_basebackup接受-Z 0
指定不压缩 (Fujii Masao)
为pg_ctl start -w
恢复到旧启发式超时
(Tom Lane)
当启用silent_mode
时,版本9.1.20中采用的新方法不起作用,
因此返回旧方式。
修复用于构建AIX共享库的makefile文件规则对于并行make是安全的 (Noah Misch)
修复TAP测试和MSVC脚本使其在构建目录的路径名中包含空格时可以运行 (Michael Paquier, Kyotaro Horiguchi)
使回归测试对丹麦和威尔士环境是安全的 (Jeff Janes, Tom Lane)
更改一些触发这些区域设置的异常排序规则的测试数据。
更新或拷贝时区代码以匹配IANA的tzcode版本2016c (Tom Lane)
这需要应对时区数据文件中预期的未来变化。它还修复了一些处理异常时区的角落错误。
将时区数据文件更新为Kemerovo和新西伯利亚的DST法律变更的 tzdata版本2016f,以及阿塞拜疆、白俄罗斯和摩洛哥的历史更正。