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,是这条路径上节点意义最强的几个版本。
浙公网安备 33010602011771号