翻译:亭亭小次郎@飞象 ... 新闻稿采编:2016-10-28 00:40:21+08

软件发布:2016-10-27

PostgreSQL全球开发组在2016-10-27日 发布了PostgreSQL数据库系统中所有支持版本的更新, 包括9.6.1,9.5.5,9.4.10,9.3.15,9.2.19和9.1.24。 这也是PostgreSQL 9.1系列的最后一次更新, 因为它现在结束维护生命周期。 此版本修复了两个可能导致数据损坏的问题,下 面将对此进行更详细的介绍。

英文链接

它还修正了过去三个月中报告的一些其他错误。 项目组敦促用户在下次可能的停机时间应用此更新。

截断关系的WAL日志记录

在此版本之前,存在一个可能遇到的问题, PostgreSQL实例将尝试访问不再存在于磁盘上的数据。 如果可用空间映射未更新以了解截断, 则 PostgreSQL 数据库可能返回已被截断的页面, 并产生如下错误:

ERROR:  could not read block 28991 in file "base/16390/572026": read only 0 of 8192 bytes

如果启用校验和,则还会出现可见性映射中的校验和故障。

这个问题存在于 PostgreSQL 的9.3,9.4,9.5和9.6系列的版本中。

pg_upgrade在大端机器上的问题

在大端机器(例如许多非Intel CPU架构)上,pg_upgrade不正确地写入可见性映射的字节, 导致 pg_upgrade无法完成。

如果你使用的是big-endian机器(许多非Intel架构都是big-endian) 并且使用pg_upgrade从9.6之前的版本升级, 你应该假定所有的可见性映射都不正确,需要重新生成。 使用 contrib/pg_visibilitypg_truncate_visibility_map() 函数截断每个关系的可见性映射就行了。 请阅读更新部分, 查阅文章末尾提到的安装说明, 可以了解相关在PostgreSQL实例上解决此问题的方法。

这个问题只存在于PostgreSQL 9.6.0版本中。

Bug修复和相关改进

除了上述,此更新还修复了在过去几个月中报告的一些错误。 其中一些问题只影响9.6系列,但许多问题影响所有社区支持的版本。 此版本更新超过了50个修订,包括:

  • 修复使用 DISTINCT 执行聚合函数时的后用后危险,这可能导致崩溃
  • 修复了用作窗口函数的多态聚合的不正确处理,这可能导致崩溃
  • 修复在big-endian机器上不正确创建GIN索引的WAL记录
  • 修复在截断大于1GB的临时表时, 文件描述符泄漏
  • 修复拥有PRIMARY KEY或REPLICA IDENTITY索引的表, 批量UPDATE时,查询内存泄漏
  • 修复SELECT FOR UPDATE/SHARE, 以正确锁定由后续中止的事务更新的元组
  • 使用已启用行级安全性的表中的列名列表修复COPY
  • 修复删除推测性插入的TOAST元组时退出 INSERT … ON CONFLICT
  • 修复VACUUM等待排它表锁定时的超时长度,以便它可以截断表
  • 在创建或更改表时修复合并中的错误继承的CHECK约束
  • 修复jsonb_set()中数组元素的替换的bug
  • 修复在btree索引中中止使用缩写键时可能出现的排序错误
  • 在Windows上,在访问被拒绝错误后,重试创建动态共享内存控制段
  • 修复 pgbench 的平均延迟计算
  • 使pg_receivexlog 使用参数 –synchronous无插槽时正确执行
  • 使pg_rewind在源服务器上的会话中关闭synchronous_commit
  • 不要尝试在libpq中的多个连接之间共享SSL上下文
  • 支持OpenSSL 1.1.0
  • 添加了TAP测试基础组件,使其可用于扩展模块的测试
  • 逻辑WAL解码和复制槽的几个修复
  • 在pg_dump,pg_xlogdump和pg_upgrade中存在的几个小问题的修复
  • 对查询计划器和EXPLAIN输出中的小问题的几个修复
  • 时区支持的几个修复

此更新还包含tzdata版本2016h为巴勒斯坦和土耳其的DST法律变化, 加上土耳其和俄罗斯一些地区的历史修正。 在南极洲,前苏联,斯里兰卡,切换到某些时区的数字缩写的问题。

IANA时区数据库中,以前为所有时区提供了缩写文本, 即使当地人口中几乎没有或没有货币的缩写。 他们正在改变这一策略, 倾向于在没有实际使用英语缩写的证据的区域中使用数字UTC偏移。 至少暂时,PostgreSQL将继续接受这样删除的缩写的时间戳输入。 但它们不会显示在pg_timezone_names视图中,也不用于输出。

在此更新中,AMT不再显示为正在使用中的亚美尼亚时间。 因此,我们更改了默认缩写集以将其解释为Amazon Time, 因此使用UTC-4而不是 UTC+4

9.1版本维护终结,以及注意事项

PostgreSQL版本9.1现在是End-of-Life(EOL)。

此版本的社区不会发布其他内容的更新或安全修补程序。 但仍然要求9.1的用户尽快升级。 相关详细信息, 请参阅我们的 版本控制策略

更新

所有PostgreSQL更新版本都是累积的。 与其他次要版本一样,用户不需要转储和重新加载其数据库, 或使用pg_upgrade应用此更新版本; 你可以简单地关闭PostgreSQL数据库,并更新其二进制文件实现更新。

如果你的系统受到大端系统pg_upgrade错误的影响, 请阅读可见性映射问题, 并按照说明,解决你的PostgreSQL实例上的这个问题。

跳过一个或多个更新版本的用户可能需要运行其他更新后步骤; 有关详细信息,请参阅早期版本的发行说明。

© 2010 PostgreSQL中文社区