2025年9月25日: PostgreSQL 18 发布!

发布 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 索引进行了多项修复,包括避免与 vacuuming 和并发索引插入死锁(部分撤销了 PostgreSQL 10 中引入的性能改进)
  • 修复了在使用索引表达式或谓词时的逻辑复制中可能发生的崩溃
  • 对预写日志 (WAL) 进行了多项修复
  • 修复了使用子 SELECT 的多个 SET 子句的 UPDATE 中可能发生的崩溃
  • 修复了向 json[b]_populate_recordset()json[b]_to_recordset() 提供零行时的崩溃
  • 对排序处理进行了多项修复,包括 CALL 语句参数中排序敏感表达式的解析
  • 对查询规划器进行了多项修复,包括提高了大型继承表或分区表组的规划速度
  • TRUNCATE 进行了多项修复
  • 确保 ALTER TABLE ONLY ADD COLUMN IF NOT EXISTS 被正确处理
  • 允许在 hot-standby (replica) 模式下使用 UNLISTEN
  • 修复了 pg_hba.conf 中 LDAP 认证条目的 ldapserver 参数中空格分隔的主机名列表的解析
  • 对 ecpg 进行了多项修复
  • 对 psql 进行了多项修复,包括使 \g targetCOPY TO STDOUT 一起工作
  • 现在,当指定 --random-seed=N 时,pgbench 的随机数生成已完全确定性且跨平台独立
  • 修复了 pg_basebackuppg_verify_checksums 以正确忽略临时文件
  • pg_dump 进行了多项修复,包括添加 ALTER INDEX SET STATISTICS 命令
  • 防止 contrib/amcheck 因内联压缩数据而产生错误的索引损坏报告
  • 支持新的 Makefile 变量,以帮助构建扩展

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

更新

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

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

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

链接