PostgreSQL 全球开发组已发布所有受支持版本的更新,包括 17.6、16.10、15.14、14.19 和 13.22,以及 PostgreSQL 18 的第三个 Beta 版本。本次发布修复了 3 个安全漏洞以及过去数月报告的 55 个以上的 Bug。
如果您此前使用 numeric_minmax_multi_ops 运算符类创建过 BRIN 索引,请参阅"更新"章节,了解升级实例后的额外操作说明。
完整变更列表请查阅发布说明。
PostgreSQL 13 将于 2025 年 11 月 13 日停止接收修复更新。如果您正在生产环境中运行 PostgreSQL 13,建议您尽早制定升级计划,迁移到更新的受支持版本。更多信息请参阅我们的版本策略。
CVSS v3.1 基础评分:3.1
受影响的版本:13 - 17。
PostgreSQL 优化器统计信息允许用户读取其无权访问的视图中的采样数据。另外,统计信息还允许用户读取行安全策略原本要隐藏的采样数据。PostgreSQL 通过对列中的可用数据进行采样来维护表的统计信息;这些数据在查询规划过程中被参考。在本次发布之前,用户可以构造一个泄漏运算符来绕过视图的访问控制列表(ACL)以及分区或表继承层次结构中的行安全策略。可获取的统计数据主要包括直方图和最常见值列表。CVE-2017-7484 和 CVE-2019-10130 曾试图修复这类漏洞,但仍存在遗漏。PostgreSQL 17.6、16.10、15.14、14.19 和 13.22 之前的版本受此影响。
PostgreSQL 项目组感谢 Dean Rasheed 报告此问题。
pg_dump 允许源服务器的超级用户在 psql 客户端中执行任意代码CVSS v3.1 基础评分:8.8
受影响的版本:13 - 17。
PostgreSQL 的 pg_dump 中存在不可信数据包含问题,恶意的源服务器超级用户可以通过 psql 元命令注入任意代码,在使用 psql 恢复转储文件时,以运行 psql 的客户端操作系统账户身份执行这些代码。pg_dumpall 也受此影响。当 pg_restore 用于生成纯文本格式转储时同样受到影响。这与 MySQL 的 CVE-2024-21096 类似。PostgreSQL 17.6、16.10、15.14、14.19 和 13.22 之前的版本受此影响。
PostgreSQL 项目组感谢 Martin Rakhmanov、Matthieu Denais 和 RyotaK 报告此问题。
pg_dump 对象名中的换行符可在 psql 客户端和恢复目标服务器上执行任意代码CVSS v3.1 基础评分:8.8
受影响的版本:13 - 17。
PostgreSQL pg_dump 中对换行符的处理不当,允许源服务器的用户通过在精心构造的对象名中嵌入 psql 元命令来注入任意代码,在使用 psql 恢复转储时以运行 psql 的客户端操作系统账户身份执行。同样的攻击方式也可以在恢复目标服务器上以超级用户身份实现 SQL 注入。pg_dumpall、pg_restore 和 pg_upgrade 也受此影响。PostgreSQL 17.6、16.10、15.14、14.19 和 13.22 之前的版本受此影响。11.20 之前的版本不受影响。CVE-2012-0868 曾修复了这类问题,但 11.20 版本重新引入了该漏洞。
PostgreSQL 项目组感谢 Noah Misch 报告此问题。
本次更新修复了过去数月报告的 55 个以上的 Bug。以下列出的问题影响 PostgreSQL 17,其中部分问题也可能影响其他受支持版本。
numeric_minmax_multi_ops 运算符类的 BRIN 索引可能导致索引膨胀和效率低下的问题。请参阅"更新"章节了解如何修复这些索引。SIMILAR TO 表达式中嵌套字符类(如 [[:alpha:]%_])的处理问题。MERGE 修复,包括并发时查询结果不正确以及目标表为继承层次结构中的父表时的问题。shared_buffers 设置非常大的系统上检查点出现无限循环。PQcancelCreate() 中的崩溃问题。所有 PostgreSQL 更新版本都是累积性的。与其他小版本更新一样,用户无需转储和重新加载数据库或使用 pg_upgrade 即可应用本次更新;只需关闭 PostgreSQL 并更新其二进制文件即可。
如果您有使用 numeric_minmax_multi_ops 运算符类的 BRIN 索引,建议在更新后对其执行 REINDEX 以修复潜在的膨胀和效率问题。
跳过了一个或多个更新版本的用户可能需要执行额外的更新后步骤;详情请参阅早期版本的发布说明。
更多详情请参阅发布说明。
本次发布标志着 PostgreSQL 18 的第三个 Beta 版本,使社区距离暂定于 2025 年 9 月/10 月左右的正式发布又近了一步。
秉承 PostgreSQL 开源社区的精神,我们强烈建议您在自己的系统上测试 PostgreSQL 18 的新功能,帮助我们发现 Bug 和其他问题。虽然我们不建议在生产环境中运行 PostgreSQL 18 Beta 3,但鼓励您尝试使用此 Beta 版本运行您的典型应用工作负载。
您的测试和反馈有助于社区确保 PostgreSQL 18 保持我们一贯的标准——交付一个稳定、可靠的世界最先进开源关系数据库版本。请阅读更多关于我们的Beta 测试流程以及如何参与贡献的信息:
https://www.postgresql.org/developer/beta/
要从早期版本的 PostgreSQL 升级到 PostgreSQL 18 Beta 3,您需要使用与 PostgreSQL 主要版本间升级类似的策略(例如 pg_upgrade 或 pg_dump / pg_restore)。更多信息请参阅文档中关于升级的章节。
PostgreSQL 18 Beta 3 中的修复和变更包括:
can't get cancellation key 错误。pg_dumpall --statistics-only 和 --no-schema 中转储多余的对象。pg_dumpall 的非文本输出文件格式。date_trunc(..., 'infinity'::timestamptz) 的问题。完整的新增和变更功能列表请参阅发布说明:
https://www.postgresql.org/docs/18/release-18.html
每个 PostgreSQL 版本的稳定性在很大程度上取决于社区的您,在 PostgreSQL 18 正式发布前使用您的工作负载和测试工具来测试即将发布的版本,以发现 Bug 和回退问题。由于这是 Beta 版本,数据库行为、功能细节和 API 仍可能会有少量变更。您的反馈和测试将帮助确定新功能的最终调整方案,因此请尽快进行测试。用户测试的质量有助于确定最终发布的时间。
PostgreSQL wiki 上公开维护着一份待解决问题列表。您可以通过 PostgreSQL 网站上的此表单提交 Bug 报告:
https://www.postgresql.org/account/submitbug/
这是 18 版本的第三个 Beta 版本。PostgreSQL 项目将在 2025 年 9 月/10 月左右正式发布前,发布一个或多个候选发布版本。更多信息请参阅 Beta 测试页面。
如果您对本发布公告有更正或建议,请发送至 pgsql-www@lists.postgresql.org 公共邮件列表。