E.27. 版本 9.4.9

E.27.1. 迁移到版本 9.4.9
E.27.2. 修改列表

发布日期:. 2016-08-11

这个版本包含各种自9.4.8以来的修复。 关于9.4主版本的新特性信息,请查看 第 E.36 节

E.27.1. 迁移到版本 9.4.9

运行9.4.X版本的用户不需要转储/恢复。

不过,如果您是从一个早于9.4.6的版本升级而来,那么请查看 第 E.30 节

E.27.2. 修改列表

  • 修复嵌套的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 可能会产生类似错误的远程查询。

  • 使inetcidr 数据类型正确拒绝具有太多冒号分隔字段的IPv6地址 (Tom Lane)

  • 防止NaN输入坐标的close_ps()中的崩溃 (point ## lseg操作符) (Tom Lane)

    使其返回NULL而不是崩溃。

  • 避免在pg_get_expr()中传递不一致的值时发生崩溃 (Michael Paquier, Thomas Munro)

  • 修复to_number()中的几个单字节缓冲区溢出 (Peter Eisentraut)

    在某些情况下to_number()函数将从输入字符串中多读取一个字符。 如果输入恰好与内存的结束相邻,那么会有可能崩溃。

  • 当指定了WITH NO DATA时,不要在包含在CREATE MATERIALIZED VIEWCREATE TABLE AS 中的查询上运行规划器 (Michael Paquier, Tom Lane)

    这避免了一些不必要的失败条件,例如,如果物化视图调用的稳定函数依赖于尚不存在的表。

  • 通过heap_update()在昂贵的路径中避免不安全的中间状态 (Masahiko Sawada, Andres Freund)

    以前,这些情况锁定了目标元组(通过设置其XMAX),但没有WAL-log这个操作, 因此如果页面溢出到磁盘,然后在元组更新完成之前发生数据库崩溃, 就会有数据完整性问题的风险。

  • 在行锁定操作的WAL重放期间修正提示位更新 (Andres Freund)

    这个问题的唯一已知后果是,由准备但未提交的事务持有的行锁在崩溃和重新启动后可能无法执行。

  • 当在序列化模式中请求FOR KEY SHARE行锁时, 避免不必要的could not serialize access错误 (Álvaro Herrera)

  • 当指定的变量具有空字符串值时,避免在postgres -C中崩溃 (Michael Paquier)

  • 修复逻辑解码中可能的大量子事务丢失 (Petru-Florin Mihancea)

  • 当子事务不包含实际修改时,修复逻辑解码失败 (Marko Tiikkaja, Andrew Gierth)

  • 确保后端查看共享目录的最新统计信息 (Tom Lane)

    在普通后端的请求后,统计信息收集器无法更新共享目录的统计信息文件。 这个问题被部分掩盖了,因为自动清理启动器定期发出导致这种更新的请求; 然而,禁用自动清理后变得明显。

  • 当多个后端请求更新时,请避免对统计文件进行冗余写入 (Tom Lane, Tomas Vondra)

  • 避免在VACUUM期间使用事务ID (Alexander Korotkov)

    VACUUM中的某些情况不必要地导致将XID分配给当前事务。 通常这是可以忽略不计的,但如果是针对XID环绕限制, 在反包装清理中消耗更多的XID是一件非常糟糕的事情。

  • 避免在VACUUM FREEZE期间取消热备用查询 (Simon Riggs, Álvaro Herrera)

    在空闲的主服务器上的VACUUM FREEZE 可能导致在其备用服务器上不必要地取消查询。

  • 在从9.3之前pg_upgrade的安装中清理多重ID时,防止可能的失败 (Andrew Gierth,Álvaro Herrera)

    这个bug的常见情况是像MultiXactId NNN has not been created yet -- apparent wraparound这样的错误。

  • 当手动ANALYZE指定列列表时,请不要重置表的 changes_since_analyze计数器 (Tom Lane)

    如果我们只是分析一些列,我们不应该阻止对其他列的日常自动分析。

  • 修复ANALYZE对具有许多空条目的唯一或几乎唯一的列进行过高估计 n_distinct (Tom Lane)

    空值可以被计数就像它们本身是不同的值,导致在某些类型的查询中严重的规划器错误估计。

  • 防止autovacuum启动为同一个共享目录的多个工作进程 (Álvaro Herrera)

    通常这不是很大的问题,因为清理不需要很长时间;但是在目录严重膨胀的情况下, 除了一个工作进程外,所有工作进程都将无用地等待,而不是在其他表格上进行有用的工作。

  • 在放弃b-tree索引页删除尝试时避免重复的缓冲区锁释放 (Tom Lane)

    在某些情况下,包括损坏的b-tree索引,这种错误阻止了VACUUM完成。

  • 阻止GiST索引构建中包含NaN组件值的几何列的无限循环 (Tom Lane)

  • 修复contrib/btree_gin,以正确处理最小可能的 bigint值 (Peter Eisentraut)

  • 教会libpq正确解码未来服务器的服务器版本 (Peter Eisentraut)

    计划在9.6之后的版本切换到两部分而不是三部分服务器版本号。确保 PQserverVersion()为这种情况返回正确的值。

  • 修复ecpgunsigned long long 数组元素的编码 (Michael Meskes)

  • 在同时具有-c-C选项的pg_dump中, 避免发出不需要的CREATE SCHEMA public命令 (David Johnston, Tom Lane)

  • 改进并行pg_dumppg_restoreSIGTERM/control-C的处理 (Tom Lane)

    确保工作进程将立即退出,并且还安排向所连接的后端发送查询取消请求, 以防万一他们正在进行长时间的运行,例如CREATE INDEX

  • 修复并行pg_dumppg_restore 中的错误报告 (Tom Lane)

    以前,pg_dumppg_restore 工作进程报告的错误可能永远不会发送给用户的控制台,因为消息通过主进程, 并且有各种死锁情况会阻止主进程传递消息。相反,只需打印一切到 stderr。 在某些情况下,这将导致重复的消息(例如, 如果所有的工作进程都报告服务器关闭),但这似乎比没有消息更好。

  • 确保Windows上并行的pg_dumppg_restore在错误后正确关闭 (Kyotaro Horiguchi)

    以前,它会报告错误,但是之后会等待直到用户手动停止。

  • 在不使用zlib支持的情况下,使pg_dump的行为更好 (Kyotaro Horiguchi)

    它并不适用于并行转储,并在其他情况下发出了一些相当无意义的警告。

  • pg_basebackup接受-Z 0 指定不压缩 (Fujii Masao)

  • 修复用于构建AIX共享库的makefile文件规则对于并行make是安全的 (Noah Misch)

  • 修复TAP测试和MSVC脚本使其在构建目录的路径名中包含空格时可以运行 (Michael Paquier, Kyotaro Horiguchi)

  • 针对锁定超时报告语句超时 更加可预测 (Tom Lane)

    在负载较重的机器上,即使应该已经先发生了语句超时, 因为报告锁定超时,回归测试有时也会失败。

  • 使回归测试对丹麦和威尔士环境是安全的 (Jeff Janes, Tom Lane)

    更改一些触发这些区域设置的异常排序规则的测试数据。

  • 更新或拷贝时区代码以匹配IANA的tzcode版本2016c (Tom Lane)

    这需要应对时区数据文件中预期的未来变化。它还修复了一些处理异常时区的角落错误。

  • 将时区数据文件更新为Kemerovo和新西伯利亚的DST法律变更的 tzdata版本2016f,以及阿塞拜疆、白俄罗斯和摩洛哥的历史更正。