pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
发行日期:. 2016-08-11
本次发布包含对 9.2.17 的多方面修复。有关 9.2 大版本中新特性的信息,请参见 第 E.51 节。.
修复嵌套 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)
防止 close_ps()(point ## lseg 操作符)在输入坐标为 NaN 时崩溃(Tom Lane)
使其返回 NULL 而不是崩溃。
修复 to_number() 中几处一字节缓冲区过读(Peter Eisentraut)
在几种情况下,to_number() 函数会从输入字符串中多读取一个字符。如果输入恰好位于内存末尾附近,则有很小的崩溃可能。
避免在经过 heap_update() 的高开销路径中出现不安全的中间状态(Masahiko Sawada、Andres Freund)
以前,这些情况会锁定目标元组(通过设置其 XMAX),但不为该动作记录 WAL,因此如果页面被刷出到磁盘,随后在元组更新完成之前发生数据库崩溃,就有数据完整性问题的风险。
避免当指定变量的字符串值为空时 postgres -C 崩溃(Michael Paquier)
避免在 VACUUM 期间消耗事务 ID(Alexander Korotkov)
VACUUM 中的某些情况会不必要地导致向当前事务分配 XID。通常这可以忽略不计,但如果已接近 XID 回卷限制,在防回卷清理期间消耗更多 XID 就非常糟糕了。
避免在VACUUM FREEZE期间取消热备查询(Simon Riggs, [Aacute]lvaro Herrera)
在原本空闲的主库服务器上执行VACUUM FREEZE可能导致其备库服务器上的查询被不必要地取消。
当手动 ANALYZE 指定列列表时,不要重置表的 changes_since_analyze 计数器(Tom Lane)
如果只分析部分列,就不应阻止其他列的例行自动分析。
修复 ANALYZE 对包含大量空值的唯一或近似唯一列的 n_distinct 高估(Tom Lane)
空值可能被当作它们本身就是不同的值来计数,导致某些类型查询中规划器的严重误估。
防止自动清理为同一共享目录启动多个工作进程([Aacute]lvaro Herrera)
通常这不是什么大问题,因为清理本来就不会花很长时间;但在目录严重膨胀的情况下,这可能导致除一个工作进程外的所有工作进程都在无用地等待,而不是对其他表做有用的工作。
防止对包含 NaN 分量值的几何列构建 GiST 索引时出现无限循环(Tom Lane)
修复 contrib/btree_gin,使其正确处理 bigint 的最小可能值(Peter Eisentraut)
让 libpq 能正确解码来自未来版本服务器的服务器版本号(Peter Eisentraut)
计划在 9.6 之后的版本中把服务器版本号从三段式改为两段式。确保 PQserverVersion() 在此类情况下返回正确的值。
修复 ecpg 中 unsigned long long 数组元素的代码(Michael Meskes)
在同时使用 -c 和 -C 选项的 pg_dump 中,避免发出多余的 CREATE SCHEMA public 命令(David Johnston、Tom Lane)
使 pg_basebackup 接受 -Z 0 表示不压缩(Fujii Masao)
修复构建 AIX 共享库的 makefile 规则,使其在并行 make 下安全(Noah Misch)
修复 TAP 测试和 MSVC 脚本,使其在构建目录路径名包含空格时也能工作(Michael Paquier、Kyotaro Horiguchi)
使回归测试在丹麦语和威尔士语区域设置下安全(Jeff Janes、Tom Lane)
修改了一些会触发这些区域设置特殊排序规则的测试数据。
更新我们的时区代码副本,以匹配 IANA 的 tzcode 2016c 版(Tom Lane)
这是为了应对时区数据文件未来预期的变更。它还修复了处理特殊时区方面的一些边界 bug。
把时区数据文件更新到 tzdata 2016f 版,涉及克麦罗沃和新西伯利亚的夏令时法规变更,以及阿塞拜疆、白俄罗斯和摩洛哥的历史数据修正。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。