PostgreSQL 全球开发小组已发布对所有受支持的 PostgreSQL 版本的更新,包括 16.4、15.8、14.13、13.16 和 12.20,以及 PostgreSQL 17 的第三个 Beta 版本。此版本修复了 1 个安全漏洞和过去几个月报告的 55 多个错误。
有关更改的完整列表,请查看发行说明。
PostgreSQL 12 将于 2024 年 11 月 14 日停止接收修复程序。如果您在生产环境中运行 PostgreSQL 12,我们建议您制定计划升级到更新的、受支持的 PostgreSQL 版本。有关更多信息,请参阅我们的版本控制策略。
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()
聚合生成的子查询。FOR i IN 1_001..1_002
)。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 社区的精神,我们强烈建议您在系统上测试 PostgreSQL 17 的新功能,以帮助我们消除可能存在的错误或其他问题。虽然我们不建议您在生产环境中运行 PostgreSQL 17 Beta 3,但我们鼓励您找到针对此 Beta 版本运行典型应用程序工作负载的方法。
您的测试和反馈将帮助社区确保 PostgreSQL 17 版本坚持我们交付世界上最先进的开源关系数据库的稳定、可靠版本的标准。请阅读有关我们的Beta 测试流程以及您如何贡献的更多信息
https://postgres.ac.cn/developer/beta/
要从早期版本的 PostgreSQL 升级到 PostgreSQL 17 Beta 3,您需要使用类似于在 PostgreSQL 的主要版本之间升级的策略(例如 pg_upgrade
或 pg_dump
/ pg_restore
)。有关更多信息,请访问有关升级的文档部分。
PostgreSQL 17 Beta 3 中的修复和更改包括
standby_slot_names
参数重命名为 synchronized_standby_slots
。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 公共邮件列表。