来源:https://www.snowflake.com/en/blog/engineering/postgresql-19-release-delay-feature-reverts/
PostgreSQL 19 发生了什么?
Elizabeth Garrett Christensen
Postgres 19 将无法按期发布。过去几年,PostgreSQL 每年秋天都会发布其主要版本。但今年,代码正处于密集的审查周期中,主要功能在 beta 阶段被撤回,还有许多其他功能正在大幅修订中。Beta 4 计划于 2026 年 9 月 24 日发布。Postgres 19 的发布肯定延迟了数周,甚至可能是数月。
Postgres 19 本来就是一个雄心勃勃的版本,包含许多大型功能。对于任何项目,你都必须选择优先事项。对于 Postgres,优先事项是质量,其次是在时间窗口内发布。团队正在缩减发布范围,以更接近在其所需质量下满足时间表。
我将分解 Postgres 19 中一些主要的撤回。虽然这是一个很长的列表,但我想非常明确地说明,PostgreSQL 代码开发过程运转得非常出色。代码正在大范围地接受测试,尚未准备好的东西正在被撤回。
PostgreSQL 是如何诞生的
典型的 PostgreSQL 代码开发过程是这样的:
- 新补丁由社区在一系列开放的 commitfest 中添加,并在 Hackers 邮件列表上讨论
- 被选中批准的补丁由约 30 名项目提交者之一添加到未来版本中
- 切出一个 beta 版本,社区开始测试约 6 个月,更新和 bug 被修补,一些功能被撤回
- 发布最终生产版本,随后是用于 bug 修补和安全更新的季度维护版本
PG19 值得注意的功能撤回
Postgres 19 版本有不少撤回:自 2025 年 6 月 beta 开始以来已有 53 个。以下是你可能熟悉的一些更主要的面向用户的功能:
-
SQL 属性图查询(SQL/PGQ)
属性图会在表之上添加图查询视图,并为 Postgres 中的图查询提供一种轻量级方法。Hackers 讨论表明存在更广泛的设计和就绪性方面的顾虑。
-
ALTER TABLE MERGE/SPLIT PARTITION(S)
这是一个长期被请求的分区管理功能。撤回讨论提到设计问题,且在本发布周期内来不及解决。
-
UPDATE/DELETE FOR PORTION OF
这是针对 Postgres 时间范围列的一个令人兴奋的更新,用于处理一些边界时间数学运算。
-
GROUP BY ALL
提交后的审查发现它遗漏了对具有非默认相等语义的
ORDER BY条目的特殊处理,产生了错误结果。 -
默认 TOAST 压缩更改为 lz4
此功能将更改 TOAST 压缩。团队讨论认为它在 buildfarm 中缺少一些支持,因此将在项目编译问题解决后重新处理。
-
pg_dumpall 的非文本输出格式
在提交后审查中发现了活动 bug,但这项工作将在未来版本中继续。
-
JSON_TABLE ON ERROR 级联
此功能使表级
ON ERROR级联到列(依据 SQL 标准),由于报告的 bug 而被撤回。 -
具有非易变约束的域(domain)的快速默认值
正确的修复需要向表访问方法 API 添加内容,因此它尚未为 v19 准备就绪。
-
逻辑复制的数据库特定快照
这与支持 REPACK 功能的逻辑复制相关。现在限制为单个进程,可以跨不同表和数据库并发运行。幸运的是,REPACK 看起来仍在 V19 中。
-
嵌套查询跟踪(pg_stat_statements)
这在查询 ID 和查询字符串之间提供了更清晰的映射,但在测试期间发现了一些语法问题。
-
在线数据校验和
你可以使用校验和来检查数据损坏。这将让你在 pg 仍在运行时更改校验和设置。
撤回的共同模式
大多数大型功能因在提交后审查中发现的设计缺陷、错误结果或发布周期后期发现的兼容性顾虑而被撤回。其中大多数将在 v20 中再次尝试。
处于风险中的 Postgres 19 功能
此 pg19 beta 中的功能有很长的 bug 和问题报告列表尚未完全解决,因此可能还会有更多功能撤回。该项目的主要贡献者之一 Robert Haas 在 AI 辅助代码的帮助下进行了一场"吓人 bug 竞赛",展示了还有哪些可能处于风险中。这些包括:
- RI 快速路径外键检查
- REPACK / REPACK CONCURRENTLY
- Postgres_fdw 统计信息导入
PostgreSQL 还维护着一个开放事项 wiki bug,即每个版本等待修复的事项。我预计随着版本 19 走向终点线,会有更多讨论。
仍在发布的
我认为 PG19 中仍有一些值得期待的好功能:
pg_plan_advice和查询计划提示功能- 并行 autovacuum
ON CONFLICT DO SELECT,使 upsert 返回现有行- 窗口函数中的
IGNORE NULLS - 许多逻辑复制改进
这里也值得注意的是,每个 PostgreSQL 版本都有很多其他功能、bug 修复、性能改进和查询计划进步。所以即使头条功能被撤回,最新的生产版本几乎总是向前迈出的一步。
AI 因素
AI 必须成为我们为何处于这种情况的故事的一部分。有几个人正在使用 AI 工具来发现 bug 并创建有效的可复现测试用例。修复相当大,因此对于其中许多功能来说,推送到未来版本是最合理的。
如果你想了解 AI 如何改变 PostgreSQL 的部署流水线,想想 CVE 修补。PostgreSQL 过去每个版本平均几个 CVE;2026 年 8 月针对 Postgres 18 的补丁有 28 个 CVE。
PostgreSQL 目前没有官方 AI 贡献政策,但预计很快会有一个。
PG 19 有什么不同?
Postgres 18 及之前的版本也有重大的撤回周期。Postgres 18 大约有 44 个,而我们目前 pg 19 是 53 个。Postgres 18 的撤回稍早一些,大多数在 beta 之后不久。许多 Postgres 19 的问题都涉及像图查询和 GROUP BY ALL 这样的主要头条功能,所以它们引起了我们的注意。这里唯一真正的区别是它们是迟发的撤回,其中许多来自深入的 AI 生成审查。
这意味着什么
推迟主要版本是很长时间以来 Postgres 未发生过的事情。在一个"发布、发布、发布"和 AI 热潮的时代,Postgres 核心团队的人类严谨是令人钦佩的。
别担心------发布过程正在发挥作用!这是一件好事!尚未准备好的功能被撤回。理由是公开的。AI 正在帮助我们捕获更多东西。
- PG18 是当今安全的升级目标。
- 属性图、
GROUP BY ALL和分区合并/拆分现在是 PG20 的素材。 - 其他功能也可能被撤回,请关注 hackers 邮件列表。
文件内容结束