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

PostgreSQL 16.4、15.8、14.13、13.16、12.20 和 17 Beta 3 已发布!

发布于 2024-08-08,作者:PostgreSQL 全球开发组
PostgreSQL 项目 安全

PostgreSQL 全球开发组已发布所有受支持版本的 PostgreSQL 更新,包括 16.4、15.8、14.13、13.16 和 12.20,以及 PostgreSQL 17 的第三个 Beta 版本。本次发布修复了 1 个安全漏洞和过去几个月报告的 55 个以上的错误。

有关更改的完整列表,请参阅 发行说明

PostgreSQL 12 EOL 通知

PostgreSQL 12 将于 2024 年 11 月 14 日停止接收修复。如果您在生产环境中使用 PostgreSQL 12,我们建议您计划升级到更新的、受支持的 PostgreSQL 版本。请参阅我们的 版本策略 以获取更多信息。

安全问题

CVE-2024-7348:pg_dump 期间 PostgreSQL 关系替换执行任意 SQL

CVSS v3.1 基本得分:8.8

受支持的、易受攻击的版本:12 - 16。

能够创建和删除非临时对象的攻击者可以注入 SQL 代码,这些代码将被并发的 pg_dump 会话执行,其权限与运行 pg_dump 的角色相同(通常是超级用户)。攻击涉及用视图或外表替换序列或类似对象,这些视图或外表将执行恶意代码。为防止此问题,引入了一个新的服务器参数 restrict_nonsystem_relation_kind,它可以禁用非内置视图的扩展以及对外部表的访问,并让 pg_dump 在可用时设置该参数。请注意,只有当 pg_dump 和它正在备份的服务器都足够新以包含此修复时,攻击才会被阻止。

PostgreSQL 项目感谢 Noah Misch 报告此问题。

错误修复和改进

本次更新修复了过去几个月报告的 55 个以上错误。以下列出的问题会影响 PostgreSQL 16。其中一些问题也可能影响 PostgreSQL 的其他受支持版本。

  • 避免“Merge Right Anti Join”计划产生不正确的结果,在这种情况下,如果内部关系已知具有唯一的连接键,当外部关系中有重复的连接键时,合并可能会出现问题。
  • 防止 VACUUM 中的无限循环。
  • 修复 ALTER TABLE DETACH ... PARTITION CONCURRENTLY 期间的分区剪枝设置。
  • 修复作为 CALL 语句参数使用的稳定函数行为。
  • pg_sequence_last_value() 现在在应用于备用服务器上的未记录序列和来自其他会话的临时序列时返回 NULL,而不是抛出错误。
  • 修复 websearch_to_tsquery() 中被忽略的操作符的解析。
  • 正确检查由 INSERT ... DEFAULT 目标列的视图的可更新性。
  • ALTER TABLE ... SET LOGGED|UNLOGGED 期间锁定已拥有的序列。
  • 如果排队的 AFTER 触发器不再存在,则不抛出错误。
  • 修复在所需的索引包含表达式或谓词时(例如,通过可更新视图)选择 INSERT ... ON CONFLICT 的仲裁索引。
  • 拒绝使用 ALTER TABLE 修改其他会话的临时表。
  • 修复 CREATE TABLE ... LIKE STATISTICS 中表达式的扩展统计信息的处理。
  • 修复由 MIN()MAX() 聚合生成的子查询失败。
  • 不允许在位置参数中使用下划线。
  • 当 JIT 内联的后端函数抛出错误时,避免崩溃。
  • 修复在启动热备服务器时,已准备事务的子事务的处理。
  • 防止逻辑复制槽初始化不正确。
  • 修复逻辑复制 WAL 发送器在将更改发布到分区表(其分区行类型与表物理不同)时的内存泄漏。
  • 禁用 OpenSSL 创建有状态 TLS 会话票证。
  • 修复 PL/pgSQL 处理包含下划线的整数范围(例如,FOR i IN 1_001..1_002)的方式。
  • 修复 PL/Perl 与 Perl 5.40 之间的不兼容性。
  • 与递归 PL/Python 函数和触发器相关的多项修复。
  • 确保 pg_restore -l 正确报告依赖表的内容条目。
  • pg_stat_statements 现在为 SQL 语言函数中出现的实用程序(非 SELECT/INSERT/UPDATE)语句提供查询 ID。
  • 修复 postgres_fdw 在将外部表映射到非平凡的远程视图时的问题。
  • postgres_fdw 不再将 FETCH FIRST WITH TIES 子句发送到远程服务器。

更新

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

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

有关更多详细信息,请参阅 发行说明

关于 PostgreSQL 17 Beta 的说明

此版本标志着 PostgreSQL 17 的第三个 Beta 版本,使社区更接近通用可用性,初步定于第三季度末。

本着开源 PostgreSQL 社区的精神,我们强烈建议您在系统上测试 PostgreSQL 17 的新功能,以帮助我们消除可能存在的错误或其他问题。虽然我们不建议在生产环境中使用 PostgreSQL 17 Beta 3,但我们鼓励您尝试在您的典型应用程序工作负载中使用此 Beta 版本。

您的测试和反馈将帮助社区确保 PostgreSQL 17 版本能够保持我们提供世界上最先进的开源关系数据库的稳定、可靠版本的标准。请阅读更多关于我们的 Beta 测试流程 以及您如何贡献。

https://postgresql.ac.cn/developer/beta/

升级到 PostgreSQL 17 Beta 3

要从早期版本的 PostgreSQL 升级到 PostgreSQL 17 Beta 3,您将需要使用与升级 PostgreSQL 主版本相似的策略(例如,pg_upgradepg_dump / pg_restore)。有关更多信息,请访问有关 升级 的文档部分。

Beta 2 以来的更改

PostgreSQL 17 Beta 3 中的修复和更改包括:

  • standby_slot_names 参数重命名为 synchronized_standby_slots
  • 多项 SQL/JSON 修复。
  • 修复 pg_combinebackup --clone
  • 修复 pg_createsubscriber 以支持包含空格的数据库名称。
  • pg_createsubscriber 现在会在目标数据库上运行时删除预先存在的订阅。
  • pg_upgrade 期间提高检索订阅信息的效率。
  • 修复 sslmode=prefer 期间的 TLS 回退行为,在服务器在启动过程中发送错误时会报错。
  • 记录 pg_basebackup 在备用服务器上执行增量备份时,在上次备份后立即执行的错误情况。
  • 修复 pg_upgrade --transaction-size 可能导致后端使用比平时多一个数量级的 RAM 的问题。

请参阅 发布说明 以获取新功能和更改功能的完整列表,以及 PostgreSQL 17 未解决问题 以获取有关修复和更改的更多详细信息。

测试 Bug 和兼容性

每个 PostgreSQL 版本的稳定性在很大程度上取决于您——社区——在 PostgreSQL 17 通用可用性之前,使用您的工作负载和测试工具测试即将发布版本,以发现 Bug 和回归。由于这是 Beta 版,数据库行为、功能细节和 API 仍有可能进行少量更改。您的反馈和测试将有助于确定新功能的最终调整,因此请在不久的将来进行测试。用户测试的质量将决定我们何时可以发布最终版本。

PostgreSQL Wiki 上公开提供了一个 未解决问题 列表。您可以使用 PostgreSQL 网站上的此表单 报告 Bug

https://postgresql.ac.cn/account/submitbug/

链接

如果您对此版本公告有任何更正或建议,请将其发送至 pgsql-www@lists.postgresql.org 公共 邮件列表