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。