PostgreSQL 19 Beta 1:REPACK 替代 VACUUM FULL/CLUSTER,WAIT FOR 支持 standby 读己写
PostgreSQL 19 Beta 1 已发布,正式版计划 2026-09。
REPACK:把 VACUUM FULL 和 CLUSTER 合并成一条命令
新增 REPACK 命令,整合并取代 VACUUM FULL 和 CLUSTER。传统 VACUUM FULL 和 CLUSTER 都需要排它锁;REPACK ... CONCURRENTLY 可在不阻塞读写的情况下重建表。需要在线整理表、又不想让 DML 停等时,这是 19 里最直接的选项。
WAIT FOR:在 standby 上做读己写
新增 WAIT FOR 命令,等待 standby 回放到指定 LSN,支持在 standby 上的 read-your-writes 查询模式。主库提交后拿到 LSN,到 standby 执行 WAIT FOR,等回放到该 LSN 再查,避免读到旧数据。
SQL/PGQ
支持 SQL/PGQ(SQL 标准属性图查询)。图查询写法进入 SQL 标准语法,不再只能靠扩展或应用层拼关系。
autovacuum:并行 worker 与评分
autovacuum 可使用并行 worker,新参数是 autovacuum_max_parallel_workers。同时新增评分系统,给最需要 vacuum/analyze 的表排优先级。vacuum 还引入一种新策略:在页面被查询时标记为 visible,减少后续 vacuum 工作量。
运行中开启/关闭 data checksums
数据校验和(data checksums)现在可以在数据库运行期间开启或关闭。
其他新增
- 逻辑复制现在复制 sequence 值;当
wal_level=replica时可按需自动开启逻辑复制,无需重启服务。 UPDATE/DELETE支持FOR PORTION OF子句做时间区间更新/删除。- 新增
pg_plan_advice扩展用于稳定/控制查询计划,配套pg_stash_advice按 query id 自动应用建议。 - 新增
GROUP BY ALL语法;jsonpath增加lower()/upper()/initcap()/replace()/split_part()/trim()等字符串函数。 - 支持
INSERT ... ON CONFLICT DO SELECT ... RETURNING。 - 新增
ALTER TABLE ... MERGE PARTITIONS / SPLIT PARTITIONS。 - 服务端 SNI 支持(新增
pg_hosts.conf,可按客户端请求的主机名返回不同 TLS 证书);password_expiration_warning_threshold默认 7 天。 - 监控:新增
pg_stat_lock(按锁类型的统计)和pg_stat_recovery;多个统计视图新增stats_reset列;pg_stat_progress_vacuum新增mode与started_by列。 io_method=worker时按新参数io_min_workers/io_max_workers自动扩缩 I/O worker 数量。
兼容性变更:升级前要过的清单
- 移除 RADIUS 支持。
standard_conforming_strings在服务端强制为on。max_locks_per_transaction默认从 64 改为 128。- JIT 改为默认关闭。
- 移除
MULE_INTERNAL编码。 - TOAST 默认压缩由
pglz改为lz4。 - 跨大版本迁移需
pg_dumpall/pg_upgrade或逻辑复制。