PostgreSQL 9.6.1、9.5.5、9.4.10、9.3.15、9.2.19 和 9.1.24 已发布!

发布于 2016-10-27,由 PostgreSQL 全球开发组发布

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 无法完成。

如果您使用的是大端机器(许多非 Intel 架构都是大端),并且已使用 pg_upgrade 从 9.6 之前的版本升级,则应假设所有可见性映射都不正确,需要重新生成。使用 contrib/pg_visibility 的 pg_truncate_visibility_map() 函数截断每个关系的可见性映射就足够了。请阅读“更新”部分,了解有关如何在 PostgreSQL 实例上解决此问题的安装后说明。

此问题仅存在于 PostgreSQL 9.6.0 版本中。

错误修复和改进

除了上述内容之外,此更新还修复了过去几个月报告的一些错误。其中一些问题仅影响 9.6 系列,但许多问题影响所有受支持的版本。此版本提供了 50 多个修复,包括:

  • 修复使用 DISTINCT 的聚合函数执行中的 use-after-free 风险,可能导致崩溃
  • 修复用作窗口函数的多态聚合的不正确处理,可能导致崩溃
  • 修复大端机器上 GIN 索引 WAL 记录的不正确创建
  • 修复截断大于 1GB 的临时关系时的文件描述符泄漏
  • 修复具有 PRIMARY KEY 或 REPLICA IDENTITY 索引的表上批量 UPDATE 中的查询生命周期内存泄漏
  • 修复 SELECT FOR UPDATE/SHARE 以正确锁定已被随后中止的事务更新的元组
  • 修复从启用了行级安全性的表中复制带有列名列表的 COPY
  • 修复在回滚 INSERT ... ON CONFLICT 时删除推测性插入的 TOAST 元组
  • 修复 VACUUM 等待独占表锁以截断表时的超时时长
  • 修复在创建或更改表时合并继承的 CHECK 约束中的错误
  • 修复 jsonb_set() 中数组元素的替换
  • 修复在中止使用 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,用于巴勒斯坦和土耳其的夏令时法律变更,以及土耳其和俄罗斯一些地区的历史修正。将南极洲、前苏联和斯里兰卡某些时区的缩写更改为数字。

IANA 时区数据库以前为所有时区提供文本缩写,有时会编造在当地居民中很少或没有使用的缩写。他们正在逐步扭转该政策,转而使用不存在英文缩写实际使用证据的时区的数字 UTC 偏移量。至少暂时,PostgreSQL 将继续接受此类删除的缩写进行时间戳输入。但它们不会显示在 pg_timezone_names 视图中,也不会用于输出。

在此更新中,AMT 不再显示为表示亚美尼亚时间。因此,我们将默认缩写集更改为将其解释为亚马逊时间,因此为 UTC-4 而不是 UTC+4。

版本 9.1 的 EOL 通知

PostgreSQL 版本 9.1 现在已停止维护 (EOL)。社区将不再为此版本发布任何其他更新或安全补丁。仍然使用 9.1 的用户应尽快升级。有关更多信息,请参阅我们的版本控制政策 (https://postgresql.ac.cn/support/versioning/)。

更新

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

如果您的系统受到大端 pg_upgrade 错误的影响,请阅读 可见性映射问题,并按照说明修复 PostgreSQL 实例上的此问题。

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

链接