PostgreSQL 18/19 新特性深度解读:从 IO 预取到智能运维,全面提升数据库体验
本文整理于 HOW 2026 演讲内容,演讲者:德哥,PostgreSQL ACED、IvorySQL 专家顾问委员,公众号“digoal 德哥”主理人。
一、如何高效“挖掘”新特性?
演讲者分享了一个有趣的实践:面对 PG 18 已发布的 Release Notes,他利用 AI 工具(如 Copilot)对数千条 commit 日志进行自动分析,先让模型总结出三十余条潜在特性,再逐条要求生成详细解释和代码校验,最终筛选出对用户体感最强的若干项。对于尚未正式发版的 PG 19,则通过拉取过去一年内(从 PG 18 Beta1 时间点至今)的所有 commit,同样交由 AI 分析提炼。经过人工复核,准确度令人满意。这一方法也为社区爱好者提供了高效跟踪新版本的思路。

二、PostgreSQL 18:性能与开发体验的双重提升
1. 原生排除约束,让时空数据不再“打架”
在业务系统中,我们经常需要避免时间区间、地理多边形等数据出现重叠。例如会议室预定表,不能允许同一会议室在同一时间段被两次预定。以往,PG 通过 EXCLUDE 约束来实现,但写法复杂且依赖扩展。PG 18 则原生支持范围类型和空间类型的互斥约束,语法更简洁,并且可以利用索引加速检查,大大降低了开发门槛。

2. UUID v7:告别索引膨胀
随机 UUID 作为主键时,因值无序会导致 B-Tree 索引频繁分裂,造成索引空间膨胀和性能下降。PG 18 引入 UUID v7,其值基于时间戳和机器码组合生成,天然有序。写入时新数据始终追加在索引末尾,有效避免分裂,非常适合高并发写入场景。

3. UPDATE 返回旧值 + 新值,一次搞定
开发中常有“更新记录后,既要拿到更新后的值,也要拿到更新前的值”的需求。以往需要先 UPDATE 再 SELECT,甚至要加锁保证一致性,至少两次交互。PG 18 增强了 UPDATE ... RETURNING 语法,允许同时返回 OLD 和 NEW 行,将整个过程变为单条原子 SQL,减少锁冲突和网络往返,提升业务效率。

4. 异步 I/O 预取:让云盘性能不再“纸上谈兵”
云盘往往标榜高 IOPS 和大带宽,但单次 I/O 延迟较高,单线程无法压满性能。PG 18 引入了 异步 I/O 预取(Async I/O Prefetch),当顺序扫描或 Vacuum 处理一个数据块时,通过预取接口提前告知内核下一个或下几个块的地址,内核据此提前加载到缓存。这样一来,即便单次延迟高,也能通过预取流水线充分利用 I/O 带宽,显著提升大表扫描和垃圾回收效率。

5. Skip Scan:复合索引的“快速通道”
对于 (class_id, custom_id) 这样的复合索引,若查询条件只包含 custom_id,PG 18 之前要么不走索引,要么全扫描。PG 18 引入 Skip Scan 优化,当索引前导列(如 class_id)基数较低时,优化器会为每个 class_id 值“跳过”到对应的索引入口,再搜索 custom_id。相当于递归执行少量精确查找,避免遍历全部索引条目,大幅提升此类查询的性能。

6. pg_upgrade 迁移统计信息,升级后即开即用
大版本升级后,统计信息不会自动迁移,导致执行计划不准,必须立即执行 ANALYZE,耗时较长。PG 18 的 pg_upgrade 支持将统计信息一并迁移到新实例,升级完成后即可直接开放业务,无需等待分析,有效降低升级停机窗口。

三、PostgreSQL 19:运维可观测性与自动化治理的飞跃
1. 等待事件历史统计:告别“盲人摸象”
DBA 管理成百上千个实例时,通常需要找出负载最高的实例,再深入分析原因。以往只能查看当前等待事件,无法追溯过去一段时间内的等待分布。PG 19 新增 pg_stat_wait_events 视图,记录自上次重置以来的所有等待事件总时长和总次数(包括 IO、锁、CPU 等)。结合快照对比,可以清晰定位某一时间窗口内哪些等待事件激增,进而关联到具体 SQL,极大提升根因分析效率。
2. 智能垃圾回收:优先级调度,避免事务回卷
Autovacuum 进程原本按系统表顺序扫描,对所有表“一视同仁”,但表的年龄(事务 ID 消耗)和膨胀程度各不相同。PG 19 改进了回收策略:管理员可以为每个表或全局设置多个维度(如年龄、膨胀率、上次清理时间)的权重系数,系统对每个表加权计算得分,得分最高的表优先处理。这样就能确保“年龄濒临回卷”的大表得到及时冻结,有效规避事务 ID 回卷导致的数据库只读风险。同时,系统视图会展示每个维度的分值,便于运维人员实时掌握。
3. 自适应并行 I/O:让并行度动态伸缩
以往 effective_io_concurrency 参数需要人为设定一个固定并行度,但不同表大小、不同负载下最优值差异很大。PG 19 引入 自适应并行 I/O:管理员只需设置最小和最大并行度,系统在执行顺序扫描、位图扫描、范围扫描等操作时,会动态监测 I/O 利用率,若未打满则逐步增加 Worker 数量,直至达到上限或 I/O 饱和;空闲超过阈值时间后自动回退到最小值。DBA 从此不必再为调参纠结。
4. 原生在线表收缩(VACUUM FULL 并发版)
表膨胀是 PG 运维中的常见难题。以往收缩空间要么用 VACUUM FULL(全程排他锁),要么依赖第三方工具如 pg_repack(稳定性受版本适配影响)。PG 19 将类似 pg_repack 的功能集成到内核:利用逻辑复制机制,先对目标表创建快照,将全量数据拷贝到新存储文件,同时同步增量变更,最后在切换瞬间加短暂排他锁。整个过程业务影响极小,且无需额外插件。需要注意,该功能要求表必须有主键或非空唯一键。
5. 备份与压缩全面增强
pg_dumpall支持二进制和压缩格式:以往只能输出文本格式,占用空间大且恢复慢,现在可像pg_dump一样选择自定义格式或压缩。- 默认压缩算法切换为 Zstandard(zstd):对于 JSON 等大字段,zstd 压缩率更高、速度更快,尤其适用于 AI 场景下的海量 JSON 存储。
6. 更精细的 I/O 观测与统一状态视图
EXPLAIN增加 I/O 细节:可查看 SQL 执行期间的预读次数、等待次数等,帮助判断是否应调整并行度或预取参数。- 统一状态视图:原本分散在多个系统视图中的控制文件信息和内存结构,现可通过单一视图一次性读取一致性快照,避免多次查询导致时间点不一致。
7. 图查询(SQL/PGQ)与强一致性保障
- 属性图查询支持:PG 19 引入 SQL/PGQ 标准语法,支持在关系库内构建属性图模型。这一特性在 AI Agent 记忆管理、知识图谱召回等场景尤为有用,可以便捷地表达实体间的复杂关联,实现精确检索。
- Wait for LSN:在读写分离架构中,若业务要求“读己之写”的强一致性,可在备库查询前指定等待主库的特定 LSN 位置。中间件或应用层可利用该功能,确保备库数据已同步至最新事务后再返回查询结果,避免读到旧数据。
8. 统计信息迁移补全 & DDL 信息提取
PG 18 支持普通统计信息迁移,但未包含用户创建的扩展统计信息(多列关联统计)。PG 19 将其补全,确保升级后优化器依然能生成精确的代价估算。此外,新版还提供了更便捷的 DDL 信息提取接口(例如获取视图、外表的 Schema 定义),不过表级重建 SQL 的完整支持可能还需后续版本完善。
四、升级建议与总结
PostgreSQL 的版本升级成本相对较低,无论是通过 pg_upgrade 还是逻辑复制迁移,都能较为平滑地完成。PG 18 重在夯实底层 IO 性能和开发便利性,适合追求高吞吐和简化业务代码的团队;PG 19 则聚焦运维可观测性和自动化治理,为大规模、高要求的生产环境提供利器,尤其是自适应 I/O、智能回收和在线表收缩,将显著减轻 DBA 日常负担。
面对 AI 应用对数据库提出的新挑战(如 JSON 存储、图关系检索、一致性读),PG 19 也给出了积极回应。总体而言,PostgreSQL 正以稳健而快速的步伐,持续巩固其作为“最先进开源数据库”的地位。我们鼓励广大用户关注新版本,尽早规划测试和升级路径,享受开源技术带来的红利。
活动播报

适逢 PostgreSQL 三十周年,PGConf.Asia 2026 香港站定于 11 月 17–18 日举办,大会面向全球征集 PG 实战技术分享并开放商业赞助合作,演讲提案征集 8 月 31 日截止。
更多资讯请点击:

浙公网安备 33010602011771号