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 终止支持通知

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 版本。

  • 避免“合并右反连接”计划产生不正确的结果,如果已知内部关系具有唯一的连接键,则当外部关系中存在重复的连接键时,合并可能会行为不当。
  • 防止 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://postgres.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 未解决项,以获取有关修复和更改的更多详细信息。

错误和兼容性测试

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

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

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

链接

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