PostgreSQL 11.2、10.7、9.6.12、9.5.16 和 9.4.21 版本发布!

发布于 2019-02-14,作者:PostgreSQL 全球开发组
PostgreSQL 项目

PostgreSQL 全球开发组发布了我们数据库系统所有受支持版本的更新,包括 11.2、10.7、9.6.12、9.5.16 和 9.4.21。此版本更改了 PostgreSQL 与 fsync() 接口的方式,并修复了分区问题以及过去三个月报告的 70 多个其他错误。

用户应计划在下次计划停机时应用此更新。

重点:fsync() 行为的更改

当操作系统中可用并在配置文件中启用(默认启用)时,PostgreSQL 使用内核函数 fsync() 来帮助确保数据写入磁盘。在某些提供 fsync() 的操作系统中,当内核无法写出数据时,它会返回失败并清除其数据缓冲区中本应写入的数据。

此清除操作对 PostgreSQL 产生了一个不幸的副作用:如果 PostgreSQL 再次尝试通过再次调用 fsync() 将数据写入磁盘,fsync() 将报告成功,但 PostgreSQL 认为已保存到磁盘的数据实际上不会被写入。这会造成可能的数据损坏情况。

此更新修改了 PostgreSQL 处理 fsync() 失败的方式:PostgreSQL 将不再重试调用 fsync(),而是会 panic。在这种情况下,PostgreSQL 可以从预写日志 (WAL) 中重放数据,以帮助确保数据被写入。虽然这可能看起来不是最佳解决方案,但目前几乎没有其他替代方案,并且根据报告,问题情况发生的概率极低。

已添加新的服务器参数 data_sync_retry 来管理此行为。如果您确定您的内核不会在这种情况下丢弃脏数据缓冲区,则可以将 data_sync_retry 设置为 on 以恢复旧的行为。

错误修复和改进

此更新引入了发布说明的打包方式的更改。从本次更新开始,所有当前受支持的 PostgreSQL 版本将仅包含其主要版本特定的发布说明。例如,PostgreSQL 11 仅打包版本 11.2、11.1 和 11.0 的发布说明。不受支持的版本(PostgreSQL 9.3 及更早版本)的发布说明将在旧版本中以及 PostgreSQL 网站上即将发布的存档中提供。

此更新还修复了过去几个月报告的 70 多个错误。其中一些问题仅影响版本 11,但许多问题影响所有受支持的版本。

其中一些修复包括

  • 修复了在分区表上使用 INCLUDE 列的唯一索引的处理
  • 确保分区表的 NOT NULL 约束在其分区内得到遵守
  • 对分区表的约束进行了多项修复
  • 修复了将 ON COMMIT DROPON COMMIT DELETE ROWS 应用于分区表和具有继承子表的表的问题
  • 禁止在分区表上使用 COPY FREEZE
  • 修复了 ALTER TABLE .. ADD COLUMN 与非空默认值功能的多个问题,包括可能的索引损坏情况
  • GIN 索引中的多项修复,包括避免与清理和并发索引插入的死锁(这部分还原了 PostgreSQL 10 中引入的性能改进)
  • 修复了当使用索引表达式或谓词时逻辑复制中可能发生的崩溃
  • 预写日志 (WAL) 的多项修复
  • 修复了使用子 SELECT 的多个 SET 子句的 UPDATE 中可能发生的崩溃
  • 修复了当为 json[b]_populate_recordset()json[b]_to_recordset() 提供零行时发生的崩溃
  • 与排序规则处理相关的多项修复,包括解析 CALL 语句参数中对排序规则敏感的表达式
  • 查询计划器的多项修复,包括提高大型继承或分区表组的规划速度
  • TRUNCATE 的多项修复
  • 确保 ALTER TABLE ONLY ADD COLUMN IF NOT EXISTS 被正确处理
  • 允许在热备用(副本)模式下使用 UNLISTEN
  • 修复了在 pg_hba.conf 中 LDAP 身份验证条目的 ldapserver 参数中解析空格分隔的主机名列表的问题
  • ecpg 的多项修复
  • psql 的多项修复,包括使 \g target 可以与 COPY TO STDOUT 一起使用
  • 当指定 --random-seed=N 时,pgbench 的随机数生成现在是完全确定性的且与平台无关的
  • 修复了 pg_basebackuppg_verify_checksums 以正确忽略临时文件
  • pg_dump 的多项修复,包括使 ALTER INDEX SET STATISTICS 命令存在
  • 防止 contrib/amcheck 因内联压缩数据而产生错误的索引损坏报告
  • 支持新的 Makefile 变量以帮助构建扩展

此更新还包含 tzdata 版本 2018i,用于哈萨克斯坦、梅特拉卡特拉和圣多美和普林西比的 DST 法律变更。哈萨克斯坦的克孜勒奥尔达地区被分为两个,创建了一个新的时区 Asia/Qostanay,因为某些地区没有更改 UTC 偏移量。对香港和许多太平洋岛屿的历史修正。

更新

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

跳过一个或多个更新版本的用户可能需要运行额外的更新后步骤;请参阅早期版本的发布说明了解详细信息。

PostgreSQL 9.4 将于 2020 年 2 月 13 日停止接收修复。请参阅我们的版本控制策略了解更多信息。

链接