一个 24 小时在线的 Postgres 大表,最怕的往往不是查询慢一秒,而是维护时锁住太久。表膨胀要治,索引要整理,分区要调整,复制切换还要防 sequence 对不上。

PostgreSQL 19 已进入 beta。按 Snowflake 工程博客 6 月 18 日的梳理,这一版覆盖了内置 REPACK/REPACK CONCURRENTLY、SQL/PGQ 图查询、逻辑复制增强、分区 split / merge、Autovacuum 可观测性,以及一批 SQL 和执行器优化。

有意思的地方在这里:Postgres 19 看起来没有一个能单独拿出来刷屏的功能,但它在补生产库的旧账。对 DBA、SRE 和后端团队来说,这类改动不够热闹,却更接近真实成本。

beta 不是 GA,现在适合测,不适合押生产

PostgreSQL 19 目前还是 beta。它不是正式发布,也不等于功能、语法和行为已经完全定稿。

这点要放在前面。尤其是 REPACK、SQL/PGQ、复制相关能力,都会影响真实库的维护方式和迁移路径。现在更适合做验证,不适合把核心生产库直接迁过去。

也要注意来源边界。这里讨论的是基于 Snowflake 工程博客的功能梳理,不应写成 PostgreSQL 官方 GA 公告。正式取舍仍要看后续官方 release notes 和实际测试结果。

对团队来说,现阶段动作很具体:

角色现在更该做什么不该急着做什么
Postgres DBA / 运维负责人拉一套测试环境,验证 REPACK、分区调整、Autovacuum 统计和逻辑复制链路直接把核心生产库迁到 beta
后端开发者 / 架构师对比关键 SQL 执行计划,检查 ORM、扩展和迁移脚本兼容性立刻围绕 SQL/PGQ 重做数据模型

我的判断是,这版值得提前测。不是因为它已经稳了,而是因为它碰到的都是升级前必须摸清的地方。

生产库最受益:少锁表、少黑箱、少复制切换事故

Postgres 19 beta 最有分量的线索,是把不少运维绕路收进核心能力。

过去很多团队处理表膨胀,会依赖 VACUUM FULL、CLUSTER,或使用 pg_repack 这类扩展。前两者容易带来重锁压力,后者需要额外安装、权限和运维规范。Postgres 19 引入核心 REPACK/REPACK CONCURRENTLY,至少说明这个问题已经普遍到数据库内核需要正面处理。

这不意味着 pg_repack 这类扩展马上失去价值。成熟度、功能差异、权限模型和团队习惯,都还要看实际场景。但 REPACK CONCURRENTLY 进入核心,对大表维护窗口紧张的系统,是实打实的方向变化。

几个生产侧变化可以放在一起看:

痛点PostgreSQL 19 beta 的变化影响
表膨胀治理内置 REPACK,包含 REPACK CONCURRENTLY减少对长时间锁表维护的依赖,大表整理更容易纳入常规窗口
分区策略调整支持分区 split / merge分区粒度选错或业务量变化后,不必总靠重建表兜底
Autovacuum 黑箱并行 vacuum worker、评分排序、pg_stat_autovacuum_scoresDBA 更容易看见后台维护优先级,排查“莫名变慢”时少猜一点
逻辑复制维护sequence 同步、ALL SEQUENCES、发布 EXCEPT、wal_level / effective_wal_level 可见性改进迁移、订阅库切换和复制配置检查更可控

这里最该盯的是逻辑复制。很多系统切换时,表数据同步了,但 sequence 状态没对齐,后面插入就可能撞 ID 或产生错位。Postgres 19 对 sequence 同步、ALL SEQUENCES 的补强,正是补这个缝。

发布过滤也更贴近日常运维。很多时候团队不是“只复制几张表”,而是“复制大部分表,排除少数表”。EXCEPT 这种表达方式,减少的是配置和脚本里的反向维护成本。

wal_level 和 effective_wal_level 的可见性改进也不花哨。它解决的是另一个老问题:配置到底有没有按预期生效。复制链路出问题时,少一个黑箱,就是少一段排障时间。

SQL/PGQ 和性能优化有用,但别把它们讲成换库理由

SQL/PGQ 会得到很多关注,因为“图查询”听起来更像新东西。

它的核心意思是,在关系数据上增加属性图查询能力。开发者可以用顶点和边的方式,查询客户、订单、权限、供应链、组织关系这类连接关系明显的数据。

边界也要说清楚。SQL/PGQ 不是把 Postgres 改造成专用图数据库,也不能直接等同于替代 Neo4j 这类图数据库。深度遍历、图算法、图原生存储这类场景,仍要看具体需求。

它更像给现有 Postgres 数据多开一个查询视角。很多公司并不想多维护一套数据库,也不想再加一条同步链路。如果中等复杂度的关系查询能留在 Postgres 里解决,后端团队就能少背一份数据一致性债务。

开发侧还有一些更日常的改进。COPY FROM 可跳过多行 header,并通过 ON_ERROR SET_NULL 处理脏数据;COPY TO 支持 JSON 输出和直接导出分区表。GROUP BY ALL、窗口函数 IGNORE NULLS / RESPECT NULLS、INSERT ... ON CONFLICT DO SELECT ... RETURNING,也是在减少应用层绕法。

性能部分更要克制。现在不能编造统一提升百分比,也不能假设所有负载都会变快。

更稳的说法是,anti-join、semi-join、incremental sort、聚合前推、radix sort、SIMD COPY、外键检查等改进,可能让一部分常见查询、导入和约束检查在升级后自动受益。它们的价值不是“换一个版本就起飞”,而是少数关键路径可能少吃一些 CPU、排序和 I/O 成本。

接下来观察三件事就够了:

  • 关键 SQL 的执行计划有没有变化,尤其是 join、sort、聚合和大批量导入场景。
  • 核心扩展、ORM、迁移工具和备份恢复流程是否兼容 beta 行为。
  • 逻辑复制、sequence 同步、REPACK CONCURRENTLY、Autovacuum 统计在真实数据量下是否稳定。

Postgres 19 的主线不是炫技。它更像一次把脏活累活往核心里收的版本。对生产库来说,这比多一个漂亮功能更要紧。