PostgreSQL 15.4、14.9、13.12、12.16、11.21 以及 PostgreSQL 16 Beta 3 已发布!

由 PostgreSQL 全球开发小组发布于 2023-08-10
PostgreSQL 项目 安全

PostgreSQL 全球开发小组已发布对所有受支持的 PostgreSQL 版本的更新,包括 15.4、14.9、13.12、12.16 和 11.21,以及 PostgreSQL 16 的第三个 Beta 版本。此版本修复了两个安全漏洞以及过去几个月报告的 40 多个错误。

如果您使用 BRIN 索引来查找 NULL 值,则需要在升级到此版本后 重新索引 它们。在 PostgreSQL 12 及更高版本上,您可以使用 REINDEX CONCURRENTLY 来避免阻塞对受影响的索引和表的写入,例如

REINDEX INDEX CONCURRENTLY your_index_name;

有关更改的完整列表,请查看发行说明

PostgreSQL 11 EOL 通知

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

安全问题

CVE-2023-39417:扩展脚本 @substitutions@ 在引用中允许 SQL 注入。

受支持的、易受攻击的版本:11 - 15。安全团队通常不测试不受支持的版本,但这个问题由来已久。

如果扩展脚本在引用结构(美元引用、''"")内部使用 @extowner@@extschema@@extschema:...@,则该脚本易受攻击。没有捆绑的扩展易受攻击。易受攻击的用法确实出现在文档示例和非捆绑扩展中。因此,攻击的前提是管理员安装了易受攻击的、受信任的非捆绑扩展的文件。在此前提下,这使具有数据库级 CREATE 权限的攻击者能够以引导超级用户的身份执行任意代码。PostgreSQL 将在核心服务器中阻止此攻击,因此无需修改单个扩展。

PostgreSQL 项目感谢 Micah Gate、Valerie Woolard、Tim Carey-Smith 和 Christoph Berg 报告此问题。

CVE-2023-39418MERGE 未能强制执行 UPDATESELECT 行安全策略。

受支持的、易受攻击的版本:15。

PostgreSQL 15 引入了 MERGE 命令,该命令未能针对为 UPDATESELECT 定义的行安全策略测试新行。如果 UPDATESELECT 策略禁止某些 INSERT 策略不禁止的行,则用户可以存储这些行。后续后果取决于应用程序。这仅影响使用 CREATE POLICY 定义行安全策略的数据库。

PostgreSQL 项目感谢 Dean Rasheed 报告此问题。

关于 PostgreSQL 16 Beta 的说明

此版本标志着 PostgreSQL 16 的第三个 Beta 版本,并使社区离暂定于第三季度末全面上市的目标更近一步。

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

您的测试和反馈将帮助社区确保 PostgreSQL 16 秉承我们交付世界上最先进的开源关系数据库的稳定、可靠版本的标准。请阅读更多关于我们的Beta 测试流程以及您如何做出贡献的信息

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

您可以在发行说明中找到有关 PostgreSQL 16 的所有功能和更改的信息

https://postgresql.ac.cn/docs/16/release-16.html

错误修复和改进

此更新修复了过去几个月报告的 40 多个错误。下面列出的问题会影响 PostgreSQL 15。其中一些问题也可能影响其他受支持的 PostgreSQL 版本。

  • 修复了 BRIN 索引中 NULL 值的处理。此修复不适用于现有的 BRIN 索引 -- 您需要运行 REINDEX 来修复用于搜索 NULL 值的任何 BRIN 索引。
  • 避免在 DROP DATABASE 中断时留下损坏的数据库。
  • 对分区索引的几项修复。
  • 修复 ALTER EXTENSION ... SET SCHEMA,使其在扩展包含扩展模式之外的任何对象时报错。
  • 修复表访问方法的依赖关系跟踪。
  • 不要在规划器中使用部分唯一索引进行唯一性证明。
  • 在扩展规则操作时,正确处理 RLS 策略表达式和安全屏障视图中的子 SELECT。
  • 修复 SERIALIZABLE 事务隔离模式下冲突检测中的竞争条件。
  • 修复尝试更新需要行外 TOASTing的复合列的字段时出现的间歇性故障。
  • 修复了在查询生命周期内发生的几个内存泄漏。
  • 接受 jsonpath datetime() 方法输入中的小数秒。
  • pg_hba.confpg_ident.conf 中的令牌限制增加到 10,240 字节。
  • 来自 JIT 的内存不足错误现在将导致 PostgreSQL FATAL 错误而不是 C++ 异常。
  • 允许 VACUUM 在检测到某些类型的 B 树索引损坏后继续。虽然此修复允许 VACUUM 继续,但您仍然需要 REINDEX 来修复损坏的索引。
  • 避免在崩溃恢复期间重复回放已准备好的事务。
  • 确保检查点在新创建但为空的表上调用 fsync
  • 静默“缺少 contrecord”错误,以避免记录来自 pg_waldumpwalsender 的不准确消息。
  • 修复 [fuzzystrmatch](https://postgresql.ac.cn/docs/current/fuzzystrmatch.html Soundex difference() 函数,使其能够正确处理空输入。
  • intarray 的几项修复,包括禁止 GiST 索引中过大的输入数组。
  • 修复 pg_dump,使其能够正确处理需要在解析时依赖于唯一索引的 SQL 标准函数体(BEGIN ATOMIC)。

有关可用的更改的完整列表,请查看发行说明

PostgreSQL 16 Beta 3 中的修复

  • \drg 命令添加到 psql 以显示有关角色授权的信息。
  • 将时间线 ID 添加到使用 pg_waldump --save-fullpage 生成的文件名。
  • 修复并行 VACUUM 工作进程中发生死锁后崩溃的问题。

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

https://postgresql.ac.cn/docs/16/release-16.html

更新

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

如果您使用 BRIN 索引来查找 NULL 值,则需要在升级到此版本后 重新索引 它们。在 PostgreSQL 12 及更高版本上,您可以使用 REINDEX CONCURRENTLY 来避免阻塞对受影响的索引和表的写入,例如

REINDEX INDEX CONCURRENTLY your_index_name;

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

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

更新到 PostgreSQL 16 Beta 3

要从之前的 PostgreSQL 16 Beta 版本或之前的 PostgreSQL 主要版本升级到 PostgreSQL 16 Beta 3,您需要使用类似于在 PostgreSQL 主要版本之间升级的策略(例如,pg_upgradepg_dump / pg_restore)。有关更多信息,请访问文档中关于升级的部分。

错误和兼容性测试

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

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

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

链接

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