E.18. 版本 9.5.2

E.18.1. 迁移到版本 9.5.2
E.18.2. 修改列表

发布日期. 2016-03-31

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

E.18.1. 迁移到版本 9.5.2

对于运行9.5.X的用户,不需要转储/恢复。

不过,你可能需要在应用更新后REINDEX一些索引, 根据下面的第一个修改日志条目。

E.18.2. 修改列表

  • 在非C语言环境中禁用字符串排序的缩写键 (Robert Haas)

    PostgreSQL 9.5引入了用于通过使用标准C库函数 strxfrm()作为strcoll() 的替代来加速字符串数据类型的比较的逻辑。 现在出现的大多数版本的glibc(Linux的C库的实现)有一些 strxfrm()的错误实现,在某些环境中, 可以产生不匹配strcoll()的字符串比较结果。 直到这个问题可以被更好地表示,禁用了所有非C语言环境中的优化。 (C语言环境是安全的,因为它既不使用strcoll() 也不使用strxfrm()。)

    不幸的是,这个问题不仅影响B-tree索引中的排序还影响条目排序, 这意味着如果textvarcharchar 字段是根据一个受影响的环境排序并在PostgreSQL 9.5.0 或 9.5.1 下构建或修改的话,那么它们上面的B-tree索引可能已损坏。 用户应该REINDEX可能受到影响的索引。

    现在不可能提供已知受影响环境的详尽列表。已知C 环境是安全的,并且没有证据表明基于英语的环境有麻烦, 比如en_US,但是一些其他流行的环境比如de_DE 在大多数glibc版本下受到影响了。

  • 在缓存计划中正确维护行安全状态 (Stephen Frost)

    在将查询作为多个角色执行的会话中, 计划缓存可能错误的重新使用为另一个角色ID生成的计划, 因此在使用了行级安全性(RLS)时可能应用错误的策略集。 (CVE-2016-2193)

  • 添加必须超级用户校验到一些新的contrib/pageinspect 函数 (Andreas Seltenreich)

    检查bytea值的pageinspect 扩展中的大多数函数不允许非超级用户调用,但是brin_page_type()brin_metapage_info()未能这样做。 传递人为的bytea值给它们可能会导致服务器崩溃, 或泄露几个字节的服务器内存。添加缺少的权限检查以防止滥用。 (CVE-2016-3065)

  • 修复索引的ROW()比较的不正确处理 (Simon Riggs)

    如果ROW()比较部分匹配索引排序但不完全匹配, 9.5中引入的次优化中的缺陷导致不正确的结果(例如, 不同的列顺序,或者索引同时包含ASCDESC字段)。 等待更好的解决方案,优化已被删除。

  • 修复索引的ROW()比较中NULL索引项的不正确处理 (Tom Lane)

    使用行比较的索引搜索比如ROW(a, b) > ROW('x', 'y')将在到达b列中的NULL条目时停止, 忽略可能存在与a的稍后值相关联的非NULL b值的事实。

  • 避免由于重命名文件之前或之后没有适当的 fsync()调用,导致不太可能的数据丢失情况 (Michael Paquier, Tomas Vondra, Andres Freund)

  • 在重新检查执行SELECT FOR UPDATE/SHARE 且包含一些不需要锁定的关系的查询中刚刚修改的行时修复不正确的行为 (Tom Lane)

    来自非锁定关系的行在重新检查期间被错误地视为包含所有NULL, 这可能导致不正确地决定更新的行不再通过WHERE条件, 或者不正确地输出NULL。

  • 修复json_to_record() 当其输入对象的字段包含具有匹配所请求的输出列名称之一的字段名称的子对象时的错误 (Tom Lane)

  • 修复我们用空数组调用时,jsonb_object() 的双参数形式的无效结果 (Michael Paquier, Andrew Dunstan)

  • 在将路径数组元素转换为整数以用作数组下标时, 修复jsonb_set()中的错误行为 (Michael Paquier)

  • 通过to_char()OF格式代码修正负时区偏移的格式错误 (Thomas Munro, Tom Lane)

  • 修复INSERT ... ON CONFLICT所做的可能不正确的等待记录 (Peter Geoghegan)

    日志消息有时会声称等待是由于排除约束,虽然没有这样的约束是负责的。

  • 忽略recovery_min_apply_delay参数, 直到恢复已经达到一个一致的状态 (Michael Paquier)

    以前,即使在重放要使其数据库状态有效的WAL的初始部分时, 备用服务器也会响应recovery_min_apply_delay延迟应用WAL记录。 因为在达到一致的数据库状态之前,备用数据库是无用的,所以这被认为没有帮助。

  • 正确处理在服务器启动期间pg_subtrans接近XID wraparound的情况 (Jeff Janes)

  • 修复逻辑解码中的各种错误 (Andres Freund)

    故障情况包括:当复制标识为FULLUPDATE时, 大于一个页面的元组将事务中的主键改为大到足以后台打印到磁盘, 不正确的报告subxact logged without previous toplevel record,并且错误的报告事务的提交时间。

  • 当外部视图具有包含相关子查询的WHERE子句时, 使用嵌套安全性屏障视图修复计划器错误 (Dean Rasheed)

  • 修复GIN索引搜索中的内存泄露 (Tom Lane)

  • 修复由于多次尝试释放localeconv() 输出字符串而导致的极端崩溃 (Tom Lane)

  • 修复ispell字典的附加文件的解析 (Tom Lane)

    如果附加文件包含字节长度在大小写折叠期间变化的字符, 例如土耳其语在UTF8区域设置中的I,则代码可能会出错。

  • 避免使用sscanf()解析ispell 字典文件 (Artur Zakirov)

    这避免了FreeBSD派生平台上的可移植性问题(包括 macOS)。

  • 修复用在IBM的xlc编译器的PPC上的原子操作代码 (Noah Misch)

    这个错误导致那些平台上并发操作的罕见失败。

  • 避免在具有支持AVX2 CPU的旧版Windows版本(在7SP1/2008R2SP1之前)上崩溃, 并使用Visual Studio 2013完成Postgres构建 (Christian Ullrich)

    这是Visual Studio 2013运行库中的一个错误的解决方法, Microsoft已经声明他们不会在该版本中修复。

  • 修复psql的tab完成逻辑,以正确处理多字节字符 (Kyotaro Horiguchi, Robert Haas)

  • SECURITY LABEL修复psql的tab完成 (Tom Lane)

    SECURITY LABEL之后键入TAB可能会导致崩溃或提供不适当的关键字。

  • 如果在命令行中没有指定,则让pg_ctlPGCTLTIMEOUT 环境变量中接受一个等待超时 (Noah Misch)

    通过允许他们对postmaster启动和关闭全局指定一个长于正常的超时, 可以方便测试较慢的buildfarm成员。

  • 修复pg_ctl中Windows服务状态的不正确测试 (Manuel Mathar)

    上一组小版本尝试修复pg_ctl 以正确确定是否将日志消息发送到Windows事件日志,但是测试弄反了。

  • 修复pgbench以正确的处理-C-M prepared选项的组合 (Tom Lane)

  • pg_upgrade中,当新数据目录位于旧数据目录内时, 跳过创建删除脚本 (Bruce Momjian)

    在这种情况下,盲目应用脚本将导致新的数据目录丢失。

  • 在PL/Perl中,将空的Postgres数组正确的翻译为空的Perl数组 (Alex Hunsaker)

  • 使PL/Python处理不是有效Python标识符的函数名称 (Jim Nasby)

  • 修复contrib/pgstattuplepgstatindex() 函数返回的多个统计错误 (Tom Lane)

  • 删除MSVC构建中对psed的依赖,因为核心Perl不再提供它了 (Michael Paquier, Andrew Dunstan)

  • 更新时区数据文件为tzdata release 2016c, 因为阿塞拜疆、智利、海地、巴勒斯坦和俄罗斯(Altai, Astrakhan, Kirov, Sakhalin, Ulyanovsk 区域)的DST法律变更,加上立陶宛、 摩尔多瓦和俄罗斯(Kaliningrad, Samara, Volgograd)的历史更正。