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

PostgreSQL 11.4、10.9、9.6.14、9.5.18、9.4.23 和 12 Beta 2 发布!

发布于 2019-06-20,作者:PostgreSQL 全球开发组
PostgreSQL 项目 安全

PostgreSQL 全球开发组发布了我们数据库系统所有受支持版本的更新,包括 11.4、10.9、9.6.14、9.5.18 和 9.4.23,以及 PostgreSQL 12 的第二个测试版。自五月份上一次累积更新以来,本次发布修复了一个安全问题和超过 25 个 bug。

本次发布是在正常的更新发布周期之外进行的,因为安全漏洞被认为足够关键,需要尽快分发修复程序。正在运行 PostgreSQL 10、PostgreSQL 11 或 PostgreSQL 12 测试版的用户应尽快升级。

所有其他用户应计划在下次计划停机时应用此更新。

安全问题

本次发布关闭了一个安全漏洞

  • CVE-2019-10164:通过设置密码导致基于堆栈的缓冲区溢出

受影响版本:10、11、12 测试版。

经过身份验证的用户可以通过将自己的密码更改为特意构造的值,导致基于堆栈的缓冲区溢出。除了可能导致 PostgreSQL 服务器崩溃之外,还可以被进一步利用,以 PostgreSQL 操作系统帐户的身份执行任意代码。

此外,在 SCRAM 身份验证过程中,恶意服务器可以发送一个经过特定构造的消息,导致启用 libpq 的客户端崩溃或以客户端操作系统帐户的身份执行任意代码。

通过升级并重新启动 PostgreSQL 服务器以及 libpq 安装可以修复此问题。所有运行 PostgreSQL 10、11 和 12 测试版的用户都应尽快升级。

PostgreSQL 项目感谢 Alexander Lakhin 报告此问题。

错误修复和改进

本次更新还修复了自五月份上一次累积更新以来超过 25 个 bug。其中一些问题仅影响版本 11,但许多问题影响所有受支持的版本。

部分修复包括:

  • 修复了运行时分区剪枝中的各种错误,这些错误可能导致分区表上的查询结果不正确
  • pg_dump 现在使用 CREATE TABLEALTER TABLE .. ATTACH PARTITION 来重新创建表分区,而不是在创建命令中包含 PARTITION OF
  • 改进了 initdb 在时区名称等效时确定所选系统时区的算法。还明确优先使用 UTC 而不是 UCT
  • 修复了在尝试将触发器定义复制到新分区时可能发生的崩溃
  • 修复了当表具有部分排除约束时 ALTER TABLE .. ALTER COLUMN TYPE 失败的问题
  • 修复了对域的注释时 COMMENT 命令失败的问题
  • 几处与聚合相关的修复
  • 修复了合并附加计划(merge-append plans)的错误生成,这可能导致“找不到用于排序的 pathkey 项”错误
  • 修复了视图包含具有重复连接名称的查询时,转储/恢复失败的问题
  • 修复了在 json_to_record()json_populate_record() 中将 JSON 字符串文字转换为 JSON 类型输出列的问题
  • 修复了正则表达式中 {1,1} 量词的错误优化
  • 修复了 B 树索引在涉及带有 INCLUDE 子句的列的边缘情况故障时的问题,该问题表现为 VACUUM 期间的错误。如果您受到此问题的影响,您需要重新索引特定的索引
  • 修复了检查预先存在的共享内存段是否仍被冲突的 postmaster 使用时的竞争条件
  • 修复了 walreceiver 进程,避免在关机时崩溃或死锁
  • 避免了在使用 SSL 时,如果 OpenSSL 的待处理数据缓冲区包含 256 字节的精确倍数,libpq 可能发生的挂起
  • 修复了 pg_dumppg_dumpall 为数据库和表空间发出的 GRANT 命令的顺序
  • 修复了 reindexdb 误导性的错误报告
  • 确保 vacuumdb 在使用并行作业时发生错误时返回正确的状态
  • 修复了 contrib/auto_explain 导致并行查询出现问题,从而导致“在 shm TOC 中找不到键 N”之类的失败
  • contrib/postgres_fdw 中,考虑了本地 BEFORE ROW UPDATE 触发器可能进行的数据修改
  • 在 Windows 上,当数据库编码设置为 SQL_ASCII 并且我们尝试记录非 ASCII 字符串时,避免了失败

更新

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

如果您使用了 INCLUDE 子句的 B 树索引受到了上述问题的影响,您需要重新索引任何受影响的索引。该问题表现为 VACUUM 期间发生的错误。您可以在此处阅读更多关于重新索引的信息

https://postgresql.ac.cn/docs/current/sql-reindex.html

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

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

Beta 时间表

这包括 12 版本的第二个测试版发布。PostgreSQL 项目将在需要进行测试时发布额外的测试版,然后发布一个或多个发布候选版,直到 2019 年底发布最终版本。有关更多信息,请参阅测试版测试页面。

链接