PostgreSQL 全球开发组发布了所有受支持版本的更新,包括 14.5、13.8、12.12、11.17 和 10.22,以及 PostgreSQL 15 的第三个 Beta 版本。本次发布修复了一个安全漏洞以及过去三个月报告的 40 多个 Bug。
完整变更列表请查阅发布说明 (https://www.postgresql.org/docs/release/)。
PostgreSQL 10 即将停止支持
PostgreSQL 10 将于 2022 年 11 月 10 日停止接收修复。如果您在生产环境中运行 PostgreSQL 10,我们强烈建议您制定升级到更新的受支持版本的计划,以便继续获得 Bug 和安全修复。更多信息请参阅我们的版本策略 (https://www.postgresql.org/support/versioning/)。
安全问题
CVE-2022-2625 (https://www.postgresql.org/support/security/CVE-2022-2625/):扩展脚本会替换不属于该扩展的对象。
受影响版本:10 - 14。安全团队通常不测试已停止支持的版本,但此问题存在已久。
部分扩展使用 CREATE OR REPLACE 或 CREATE IF NOT EXISTS 命令。然而,有些扩展未遵循文档中规定的规则——仅针对已知为扩展成员的对象进行操作。攻击需要具备以下条件:在至少一个 Schema 中拥有创建非临时对象的权限、能够引诱或等待管理员在该 Schema 中创建或更新受影响的扩展、以及能够引诱或等待受害者使用 CREATE OR REPLACE 或 CREATE IF NOT EXISTS 中目标对象。
满足以上三个前提条件后,攻击者可以以受害者角色(可能是超级用户)执行任意代码。已知受影响的扩展包括 PostgreSQL 自带和第三方扩展。PostgreSQL 在核心服务器中阻止了此攻击,因此无需修改各个扩展。
PostgreSQL 项目感谢 Sven Klemm 报告此问题。
关于 PostgreSQL 15 Beta 的说明
本次发布是 PostgreSQL 15 的第三个 Beta 版本,使社区距离正式发布(暂定于第三季度末)更进一步。
本着开源 PostgreSQL 社区的精神,我们强烈建议您在您的系统上测试 PostgreSQL 15 的新功能,帮助我们排除可能存在的 Bug 或其他问题。虽然我们不建议在生产环境中运行 PostgreSQL 15 Beta 3,但鼓励您尝试用此 Beta 版本运行您的典型应用工作负载。
您的测试和反馈将帮助社区确保 PostgreSQL 15 达到我们交付稳定可靠的世界最先进开源关系型数据库的标准。请阅读更多关于 Beta 测试流程 (https://www.postgresql.org/developer/beta/) 的信息以及如何参与贡献:
https://www.postgresql.org/developer/beta/ (https://www.postgresql.org/developer/beta/)
您可以在发布说明 (https://www.postgresql.org/docs/15/release-15.html) 中找到 PostgreSQL 15 所有功能和变更的信息:
https://www.postgresql.org/docs/15/release-15.html (https://www.postgresql.org/docs/15/release-15.html)
Bug 修复和改进
本次更新修复了过去几个月报告的 40 多个 Bug。以下列出的问题影响 PostgreSQL 14。其中部分问题也可能影响其他受支持的 PostgreSQL 版本。
本次发布包含:
修复在备用服务器上遇到缺失表空间 (https://www.postgresql.org/docs/current/manage-ag-tablespaces.html) 目录时 CREATE DATABASE (https://www.postgresql.org/docs/current/sql-createdatabase.html) 预写式日志 (WAL) 记录的重放问题。
新增对作为普通目录而非指向其他目录的符号链接的表空间 (https://www.postgresql.org/docs/current/manage-ag-tablespaces.html) 的支持。
修复 CREATE INDEX (https://www.postgresql.org/docs/current/sql-createindex.html) 中的权限检查以使用用户的权限。这修复了依赖于 CVE-2022-1552 (https://www.postgresql.org/support/security/CVE-2022-1552/) 修复前行为的 dump/restore 场景。
在扩展查询协议中,在 CREATE DATABASE (https://www.postgresql.org/docs/current/sql-createdatabase.html) 和其他无法在事务块中运行的命令之后强制立即提交。
修复事务可见性检查中的竞态条件,该问题在使用同步复制时更容易发生。
修复扩展统计信息 (https://www.postgresql.org/docs/current/planner-stats.html#PLANNER-STATS-EXTENDED) 的错误权限检查代码。
修复扩展统计信息机制以处理布尔值表达式上的最常见值 (https://www.postgresql.org/docs/current/planner-stats.html#id-1.5.13.5.4.13) (MCV (https://www.postgresql.org/docs/current/planner-stats.html#id-1.5.13.5.4.13)) 类型统计。
当存在 array 变量的 MCV 类型扩展统计信息 (https://www.postgresql.org/docs/current/planner-stats.html#id-1.5.13.5.4.13) 时,避免在 constant = ANY(array) (https://www.postgresql.org/docs/current/functions-subquery.html#FUNCTIONS-SUBQUERY-ANY-SOME) 子句中出现计划器崩溃。
允许在 ANALYZE (https://www.postgresql.org/docs/current/sql-analyze.html) 计算扩展统计信息时取消操作。
修复 ALTER TABLE ... ENABLE/DISABLE TRIGGER (https://www.postgresql.org/docs/current/sql-altertable.html) 处理分区表触发器递归的问题。
拒绝 FROM 中列数超过 1600 的 ROW() 表达式和函数。
修复逻辑复制订阅者中的内存泄漏。
修复目标表为分区表时逻辑复制副本标识的检查问题。
在 SPI_commit() (https://www.postgresql.org/docs/current/spi-spi-commit.html) 中处理提交时错误的清理工作,而不是期望调用方来处理。这包括对 PL/Python (https://www.postgresql.org/docs/current/plpython.html) 中相同场景的修复,该场景在 Python 3.11 上报告了崩溃,在旧版 Python 3 上报告了内存泄漏。
改进 libpq 在管道模式 (https://www.postgresql.org/docs/current/libpq-pipeline-mode.html) 中的空闲状态处理。
在 psql (https://www.postgresql.org/docs/current/app-psql.html) 的 \watch 命令中,使用 control-C 取消后回显换行。
修复 pg_upgrade (https://www.postgresql.org/docs/current/pgupgrade.html) 以检测接受 anyarray 参数的函数的不可升级用法。
多项 postgres_fdw (https://www.postgresql.org/docs/current/postgres-fdw.html) 修复,包括在存在 WITH CHECK OPTION 约束时阻止批量插入。
完整变更列表请查阅发布说明 (https://www.postgresql.org/docs/release/)。
更新方式
所有 PostgreSQL 更新版本都是累积性的。与其他次要版本一样,用户无需转储和重新加载数据库或使用 pg_upgrade 来应用此更新版本;只需关闭 PostgreSQL 并更新其二进制文件即可。
跳过了一个或多个更新版本的用户可能需要运行额外的更新后步骤;请参阅早期版本的发布说明了解详情。
更多详情请参阅发布说明 (https://www.postgresql.org/docs/release/)。
升级到 PostgreSQL 15 Beta 3
从 Beta 2、Beta 1 或更早版本的 PostgreSQL 升级到 PostgreSQL 15 Beta 3,您需要使用类似于 PostgreSQL 大版本升级的策略(例如 pg_upgrade 或 pg_dump / pg_restore)。更多信息请参阅文档中的升级 (https://www.postgresql.org/docs/15/static/upgrading.html) 章节。
测试 Bug 和兼容性
每个 PostgreSQL 版本的稳定性在很大程度上取决于社区成员(也就是您),使用您的工作负载和测试工具测试即将发布的版本,在 PostgreSQL 15 正式发布前发现 Bug 和回归问题。由于这是 Beta 版本,数据库行为、功能细节和 API 仍可能发生变更。您的反馈和测试将帮助确定新功能的最终调整,请尽快进行测试。用户测试的质量决定了我们何时可以发布正式版本。
公开问题列表 (https://wiki.postgresql.org/wiki/PostgreSQL_15_Open_Items) 可在 PostgreSQL wiki 上查看。您可以通过 PostgreSQL 网站上的表单报告 Bug (https://www.postgresql.org/account/submitbug/):
https://www.postgresql.org/account/submitbug/ (https://www.postgresql.org/account/submitbug/)
链接
下载 (https://www.postgresql.org/download/)
发布说明 (https://www.postgresql.org/docs/release/)
安全 (https://www.postgresql.org/support/security/)
版本策略 (https://www.postgresql.org/support/versioning/)
Beta 测试信息 (https://www.postgresql.org/developer/beta/)
PostgreSQL 15 Beta 发布说明 (https://www.postgresql.org/docs/15/release-15.html)
PostgreSQL 15 公开问题 (https://wiki.postgresql.org/wiki/PostgreSQL_15_Open_Items)
在 Twitter 上关注 @postgresql (https://twitter.com/postgresql)