编程 PG19 的 REPACK:把 VACUUM FULL 和 CLUSTER 合成一条命令,CONCURRENTLY 不阻塞读写

2026-10-15 21:03:21

PG19 的 REPACK:把 VACUUM FULL 和 CLUSTER 合成一条命令,CONCURRENTLY 不阻塞读写

信源:PostgreSQL 19 release notes(as of 2026-09-14),以及 PostgreSQL 19 Open Items。

REPACK:VACUUM FULL 与 CLUSTER 合并

PG19 新增 REPACK 命令,把现有 VACUUM FULL 和 CLUSTER 的能力合到一条语句里:回收磁盘空间,同时重排表内容。过去这两个操作各写一遍,现在统一入口。

关键在新选项 REPACK ... CONCURRENTLY。VACUUM FULL 和 CLUSTER 都需要 AccessExclusive 锁,执行期间表上的读写全部阻塞;CONCURRENTLY 版本不阻塞表上的读写,重建过程可以和其他会话并发进行。

取舍很直白:

  • 走传统 VACUUM FULL / CLUSTER:锁最重,业务停摆,但不需要额外磁盘空间、完成得快。
  • 走 REPACK ... CONCURRENTLY:不阻塞读写,代价是要在重建期间同时保留新旧两份数据,磁盘占用更高,整体耗时也更长。

选哪条取决于你能不能接受停写,以及当前空间是否撑得住一份额外副本。

autovacuum 并行清理

autovacuum 现在可以用并行 worker 清理表的索引,相关参数是 autovacuum_max_parallel_workers。

评分系统也有更新,用来决定先 vacuum/analyze 哪些表,对应视图 pg_stat_autovacuum_scores。

复制:WAIT FOR LSN 与 sequence

新增 WAIT FOR LSN,让备库等到重放推进到某个 LSN 之后再返回,用于实现 read-your-writes。

逻辑复制可以复制 sequence 值。

wal_level=replica 时,可以按需自动启用逻辑复制,不需要重启实例。

planner 与查询语法

  • pg_plan_advice 扩展:稳定/控制 planner 的决策。
  • pg_stash_advice:按 query 自动套用 planner advice。
  • GROUP BY ALL 语法。
  • jsonpath 新增 lower / upper / initcap / replace / split_part / trim。

I/O、视图与 SNI

  • io_method=worker 下,I/O worker 按 io_min_workers / io_max_workers 自动伸缩。
  • pg_hosts.conf 支持服务端 SNI。
  • 新增 pg_stat_lock、pg_stat_recovery 视图。
  • 多个视图增加 stats_reset 列。

Beta4 砍掉了什么

这部分是规划时的陷阱。Beta4(2026-09-24)回退了若干原计划特性,如果照着 beta1 阶段的公告做方案,会直接落空:

  • 移除 SQL/PGQ(property graph query)。
  • 移除在线启用/禁用 data checksums。
  • 移除 FOR PORTION OF 的时间维度更新/删除。
  • 移除 ALTER TABLE ... MERGE/SPLIT PARTITIONS。
  • 删除 pg_get_role_ddl() 等函数。
  • 回退 postmaster 强制 LC_COLLATE=C 的改动。

也就是说,SQL/PGQ 和「不重启在线开关 checksums」这两项在 Beta4 已经不在了,别把它们排进上线计划。

时间线

RC1 计划 2026-10-15,GA 计划 2026-11-19。源码仓库开源,不在 GitHub 托管。

文档与发布说明以官方为准:postgresql.org/docs/19/release-19.html。

复制全文 生成海报 PostgreSQL 数据库 运维 SQL

推荐文章

程序员茄子在线接单