PostgreSQL 18:近年最重要的版本发布——异步 I/O、UUIDv7 与开发者友好特性详解
2025 年 9 月 25 日,PostgreSQL 18 正式发布。Neon 的博文称其为「近年最重要的发布之一」。这一版本围绕三大支柱展开:性能(异步 I/O 与查询优化)、开发者体验(UUIDv7、虚拟生成列)以及运维(更平滑的升级、更丰富的监控与增强的安全能力)。
异步 I/O:最关键的架构级变革
PostgreSQL 长期采用同步 I/O 模型,而 18 引入了全新的异步 I/O(AIO)子系统,这是读密集型工作负载的根本性改变:官方基准测试显示读性能可提升 2 到 3 倍,云环境下的 I/O 延迟显著降低。新子系统支持两种实现:Linux 的 io_uring 与跨平台 worker 线程模式,通过 io_method(’sync’、’worker’、’io_uring’)和 io_workers(I/O worker 进程数)等配置参数控制,并提供 pg_aios 系统视图实时监控异步 I/O 操作。
Skip Scan 与查询优化:索引更少,查询更快
PostgreSQL 18 为 B-tree 索引增加了 skip scan(跳跃扫描)能力。以往对 (region, category, date) 这样的索引,缺少前导列 region 的查询只能全表扫描;现在 WHERE category=’Electronics’ AND date>’2024-01-01′ 这类查询可以直接走索引。此外,本版本还会把 OR/IN 条件自动转换为 ANY(array) 操作、改进哈希连接性能、支持 GIN 索引并行构建,并加强了分区表的分区裁剪与连接优化。
开发者体验:UUIDv7、虚拟生成列与更多
PostgreSQL 18 原生支持 UUIDv7——一种按时间戳排序的 UUID。相比随机生成的 UUIDv4,它对 B-tree 索引更友好、天然按时间排序,减少页分裂,适合分布式系统中的排序主键;uuidv7() 直接生成值,uuid_extract_timestamp() 可反查时间戳。另外,虚拟生成列(读时计算、不落盘)成为默认策略,降低存储开销并加快 INSERT/UPDATE;RETURNING 子句可在一条语句中同时获取 OLD/NEW 值,大幅简化变更追踪;新增 WITHOUT OVERLAPS 时间约束,可用于房间预订等区间业务防止时间重叠。
安全与运维:OAuth、升级体验与监控
安全方面,PostgreSQL 18 支持 OAuth 2.0 认证,可与现代身份提供商集成;MD5 密码认证被正式弃用并将在下一个大版本移除,官方建议迁移到 SCRAM-SHA-256;新增 ssl_tls13_ciphers 参数可精细控制 TLS 1.3 密码套件。运维方面:大版本升级时保留优化器统计信息,升级后不再需要长时间 ANALYZE;pg_upgrade 新增 –jobs 并行处理与 –swap 加速目录操作;EXPLAIN ANALYZE 默认包含 buffer 使用情况;pg_stat_io 提供字节级统计;vacuum/analyze 耗时直接记录在 pg_stat_all_tables 中;新集群默认开启数据校验和,帮助及早发现存储层数据损坏。
如何开始使用 PostgreSQL 18
官方建议先测试应用兼容性、对异步 I/O 做基准测试、尝试 UUIDv7 与虚拟生成列,并演练升级流程。本地快速体验只需一条命令:docker run –name pg18 -e POSTGRES_PASSWORD=postgres -p 5432:5432 postgres:18。值得注意的是,部分云厂商(如 Neon)目前以 io_method=’sync’ 模式提供 18 的预览版以保证稳定性,完整异步 I/O 支持随后开放;生产环境建议待预览期结束后再升级。
小夏点评
异步 I/O 是 PostgreSQL 历史上少见的「架构级」升级——2-3 倍的读性能提升不是小打小闹,云环境下的读密集型业务(报表、搜索、API 服务)会最先受益。
「一个删除你代码的发布,比一个让你写更多代码的发布更好」:UUIDv7、虚拟生成列和 RETURNING OLD/NEW 替应用层删掉了大量手写逻辑(应用侧 UUID 生成器、影子 SELECT、记录前镜像的触发器),这是实打实的生产力。
升级这件事终于不再可怕了:统计信息保留、pg_upgrade 并行化、更丰富的监控,意味着大版本升级的成本在系统性下降,18 的升级窗口就是现在。
对中国 IT 运维者的启示:国内大量存量系统仍运行在 PostgreSQL 14/15 且没有升级计划,而 18 的异步 I/O、默认数据校验和与 OAuth 认证都是「免费」的性能与安全收益,升级成本又明显低于以往大版本。建议先在测试环境跑通新版本,对关键只读查询做基准对比、确认 EXPLAIN 计划合理,再安排业务低峰期升级;同时应尽早把 MD5 认证换成 SCRAM,避免下一版本强制迁移的风险。
