A-speed

每个人都是🏆
  新随笔  :: 管理

PostgreSQL 从 9.x 到 18 各主要版本的重大变化梳理

Posted on 2026-10-20 10:13  a-speed  阅读(15)  评论(0)    收藏  举报

9.x 系列(2010–2016):基础能力集中补齐

9.x 时期为后续的现代化奠定了基础,多项核心能力在这一阶段被引入。

9.0(2010)

  • 流复制(Streaming Replication):引入异步流复制,第一次让 PostgreSQL 具备了原生的主从高可用基础。

  • 热备(Hot Standby):从库可以在恢复过程中接受只读查询。

9.1(2011)

  • 同步复制:在异步流复制之上增加了同步选项,确保主从数据一致性。

  • 外部数据封装器(FDW):开启跨数据库、跨数据源查询的能力。

9.2(2012)

  • JSON 数据类型:原生支持存储和查询 JSON。

  • 级联复制:从库可以继续向下游复制。

9.3(2013)

  • 物化视图:支持缓存查询结果,为读密集型场景提供了新的优化手段。

9.4(2014)

  • JSONB:二进制 JSON 存储格式,支持索引,JSON 处理从“能用”变为“好用”。

  • 逻辑解码:为后续的逻辑复制和 CDC(变更数据捕获)铺平了道路。

9.5(2016)

  • UPSERT(INSERT … ON CONFLICT):解决了长期缺失的“插入或更新”原子操作。

  • 行级安全性(RLS):细粒度访问控制正式进入内核。

  • BRIN 索引:面向大范围有序数据的轻量级索引类型。

9.6(2016)

  • 并行查询:首次支持并行顺序扫描和并行聚合,开始利用多核 CPU。


10–12(2017–2019):分区、逻辑复制与 JIT 的现代化起步

从 10 开始,版本号简化,功能节奏也变得更加清晰。

10(2017)

  • 声明式分区:取代了过去基于继承和触发器的分区方式,分区表管理大幅简化。

  • 逻辑复制:在 9.4 逻辑解码的基础上,正式支持实例间的表级逻辑复制。

  • 并行查询增强:并行索引扫描、并行哈希连接等能力开始铺开。

11(2018)

  • JIT 编译:基于 LLVM 的即时编译,对 CPU 密集型的分析型查询带来明显加速。

  • 哈希分区:声明式分区补上了哈希分区方式。

  • 存储过程:支持在 PROCEDURE 中进行事务控制。

12(2019)

  • B-tree 索引优化:索引管理效率提升,为后续版本的去重和空间优化打下基础。

  • 生成列:支持自动计算的列。

  • 分区表性能优化:分区裁剪和整体查询性能得到改善。


13–15(2020–2022):性能深水区与 SQL 标准对齐

这一阶段的改进更加细腻,聚焦于“减少浪费”和“补齐标准语法”。

13(2020)

  • 增量排序(Incremental Sort):对于部分有序的数据,只排序无序部分,在 ORDER BY … LIMIT 等场景下效果显著。

  • B-tree 索引去重:相同键值只存一次,索引体积可缩减 30%–50%,减少磁盘 I/O。

  • 并行 VACUUM:清理操作可以并行化,缩短维护窗口。

14(2021)

  • SQL/JSON 路径查询:jsonb_path_* 系列函数让 JSON 查询能力发生质变。

  • 并行聚合增强:并行查询的适用范围进一步扩大。

  • 连接可扩展性改进:针对高并发连接场景优化了快照和内存管理。

15(2022)

  • MERGE 语句:支持 SQL 标准的“合并”操作,简化了“存在则更新、否则插入”的逻辑。

  • 逻辑复制行/列过滤:可以在发布端过滤要复制的行和列。

  • 权限分离与扩展安全:公共模式默认不可写,安全性模型更加稳健。


16–18(2023–2025):并行深化、复制成熟与 I/O 架构升级

近期版本的主线非常清晰:把并行做透,把逻辑复制做可靠,并在 18 中触及存储 I/O 的底层架构。

16(2023)

  • 并行连接:FULL 和 RIGHT 哈希连接可以并行执行,并行查询的覆盖范围进一步扩大。

  • 从备用库进行逻辑复制:逻辑复制不再必须从主库拉取,架构灵活性提升。

  • 大事务并行应用:逻辑复制订阅端可以并行应用大事务,降低延迟。

  • 双向逻辑复制起步:开始支持表与表之间的双向复制能力。

17(2024)

  • pg_basebackup 增量备份:基础备份工具终于支持块级增量备份,并配套引入 pg_combinebackup 用于合并备份集。

  • 逻辑复制槽跨大版本升级迁移:pg_upgrade 可以保留发布端的逻辑复制槽和订阅端的完整状态,大版本升级不再需要重建逻辑复制链路。

  • pg_createsubscriber:可以从物理备库直接创建逻辑副本,打通物理复制与逻辑复制的工具链。

  • VACUUM 内存管理改进:降低了 VACUUM 的内存消耗,提升清理性能。

18(2025)

  • 异步 I/O(AIO)子系统:这是 18 最底层、影响最深远的变化,针对顺序扫描、位图堆扫描、VACUUM 等场景引入异步 I/O,读取密集型负载的性能提升显著。

  • B-tree 跳过扫描(Skip Scan):对于多列 B-tree 索引,即使查询条件不包含前导列,也能更有效地利用索引。

  • 逻辑复制支持生成列:生成的列现在可以纳入逻辑复制范围,补齐了一个长期存在的能力缺口。

  • UUID v7 原生支持:UUID v7 具有时间有序性,对索引局部性和排序更友好。

  • 数据校验和默认开启:initdb 默认启用数据校验和,提升了数据损坏的早期发现能力。


一条演进主线

如果把这十几个版本串起来看,PostgreSQL 的演进大致走过了一条 “先补齐企业级基础(9.x)→ 再建立分区与逻辑复制的现代框架(10–12)→ 然后深入性能细节与 SQL 标准(13–15)→ 最终在并行、复制可靠性和 I/O 架构上同时发力(16–18)” 的路径。其中,10 的分区与逻辑复制、15 的 MERGE、17 的增量备份与复制槽迁移、18 的异步 I/O,是这条路径上节点意义最强的几个版本。