研究报告 · 约 33,626 字 · 预计推送 4 部分

PostgreSQL 深度入门:事务、MVCC、索引、JSONB、全文检索与备份恢复(横纵综合报告) 未开始

目录

题记与说明

撰写日期:2026-10-31
修订日期:2026-11-01(按独立审读意见逐条修订为最终稿)
报告性质:本报告由同日完成的两份章节稿综合修订而成——纵轴章节《课题纵向研究报告》(发展脉络)与横轴章节《横向对比报告(2026-10-31 截面)》(横向对比)。合并时消除了两稿之间的重复与口径差异(统一说明见文末附录 A),并保留全部来源链接。
核验说明:正文事实绝大多数来自 2026-10-31 当日网络检索与直接抓取的一手来源(官方文档、各版本发布说明、排名页、GitHub 仓库),链接见文末"参考来源";凡标注 ★ 的条目为社区公认的版本归属或常识性技术事实(两份原稿分别以 ★ 与【模型知识】标注,本稿统一为 ★),未在本次会话逐条核验,引用时请注意复核。正文反复使用的技术术语统一在下方"术语速查"一句话定义,正文不再展开。

术语速查(正文反复使用、首次出现不展开的概念在此定义;运维细节见"四、延伸阅读与常见追问"):

术语一句话定义
MVCC(多版本并发控制)同一行保留多个历史版本,读写互不阻塞,各事务按自己的可见性规则挑选版本。
快照(snapshot)事务在某一时刻的"可见性视图",判定哪些行版本对当前事务可见。
xmin / xmax每行头部记录的创建该版本的事务 ID(xmin)与废弃该版本的事务 ID(xmax),配合快照完成可见性判断。
死元组(dead tuple)被 UPDATE/DELETE 废弃、仍占堆表空间、等待回收的旧行版本。
VACUUM / autovacuum回收死元组、冻结老事务号的后台清理机制;autovacuum 是其按阈值自动触发的形态。
XID 回卷(wraparound)事务 ID 为 32 位(约 42 亿个),耗尽后回卷复用会使"新旧"判断颠倒;必须靠 VACUUM 及时冻结老行——官方文档给出的保护梯级:距回卷点剩 4000 万事务时开始告警,剩量不足 300 万时拒绝分配新事务 ID(库变为只读)。
仅索引扫描(index-only scan)查询所需列全部在索引中、且可见性映射确认页面干净时,无需回表读堆的扫描方式。
复制槽(replication slot)主库上记录"下游消费者还需要哪段 WAL"的对象,防止所需 WAL 被过早回收;弃用不删会导致 WAL 堆积。
history list lengthInnoDB 中等待 purge 线程清理的 undo 历史链长度,MySQL 侧与"死元组堆积"对标的监控指标。
SSI(可串行化快照隔离)Serializable Snapshot Isolation——PostgreSQL 原生 SERIALIZABLE 隔离级别的实现,在快照隔离之上增加读写冲突检测。
WAL(预写日志)"先记日志、后写数据页"的追加式日志,是崩溃恢复、复制、备份与逻辑解码的共同底座。
GIN(通用倒排索引)为"一个值内含多个元素"的列(tsvector、jsonb、数组)建立的倒排索引,JSONB 与全文检索两个子专题的共同枢纽。
PITR(时间点恢复)基础备份 + 重放 WAL 到指定时刻的恢复方式。

TL;DR

PostgreSQL 五十年遵循「学术原型给思想、社区给工程、外部压力给时机」:MVCC、WAL、PITR、全文检索进核心、jsonb、增量备份与 AIO 相继落地(1999–2025),每次跃迁都是对外部冲击的回应。2026 年 10 月,它居 DB-Engines 第 4,是前四名中唯一正增长的数据库;在 Stack Overflow 2025 年调查中是最常用数据库。五个能力子专题(事务/MVCC、索引、JSONB、全文检索、备份恢复;事务与 MVCC 合为一项分析,口径见 1.1)恰是护城河:堆内多版本 + VACUUM、六种索引、GIN 同服 JSONB 与全文检索、WAL 一等公民的备份。建议默认选 PostgreSQL:半结构化字段用 JSONB,中小搜索留在库内,文档优先或超大规模搜索再选 MongoDB / ES;学习按 MVCC → 索引 → JSONB → 全文 → 备份推进,步步相承(每个专题的动手入口见"四、延伸阅读与常见追问")。


一、纵轴:发展脉络(1972–2026)

1.1 一句话总脉络

PostgreSQL 的五十年是一条从伯克利实验室走向全球基础设施的线:Ingres 验证关系模型 → POSTGRES 实验对象关系与多版本雏形 → Postgres95 SQL 化并被社区接管 → 6.x/7.x 打下 MVCC、WAL 的地基 → 8.x 借 PITR、Windows 移植、核心全文检索走向生产级 → 9.x 用流复制和 jsonb 回应互联网与 NoSQL 浪潮 → 10–12 完成逻辑复制、声明式分区与并行化 → 13–18 用增量备份、异步 I/O、B-tree skip scan 保持年更节奏。

子专题口径(全文统一):标题所列"事务、MVCC、索引、JSONB、全文检索与备份恢复"为六个子专题;由于事务与 MVCC 在 PostgreSQL 中互为一体(MVCC 是事务的实现机制,见 §2.2),后文将二者合为一项分析,因此编年小结(1.11)与交叉洞察(3.1)实际覆盖五个能力子专题——事务/MVCC、索引、JSONB、全文检索、备份恢复;另有并行化一条贯穿性辅线(并行查询 → 并行建索引 → 并行 VACUUM → 异步 I/O),它不是子专题,但因跨越多个子专题而在编年表中单列一行。这五个能力子专题各自都能在这条时间线上找到清晰的落点。

1.2 阶段一:史前与母体(1972–1985)——Ingres 与关系模型的验证

E.F. Codd 1970 年提出关系模型之后,约 1972–1973 年,加州大学伯克利分校的 Michael Stonebraker 与 Eugene Wong 教授启动了 Ingres(INteractive Graphics and REtrieval System)项目,Gerald Held 随后加入、Larry Rowe 后来参与,目的是用可运行的系统验证 Codd 的理论。其奠基论文《The Design and Implementation of INGRES》发表于 1976 年 ACM TODS(华盛顿大学数据库史、论文原文 PDF(CMU 存档))。Ingres 后来被商业化(Relational Technology Inc.,几经易手至 ASK、Computer Associates)。

驱动因素:关系模型在纸面上提出后,学界需要第一个"能跑起来的"多用户关系数据库来证明其可行性;Ingres 与 IBM 的 System R 一起完成了这场验证。Stonebraker 也因包括 Ingres 与 POSTGRES 在内的系列工作获得 2014 年图灵奖。

1.3 阶段二:POSTGRES(1986–1994)——对象关系实验与多版本思想的胚胎

Ingres 之后,Stonebraker 在伯克利启动了"Post-Ingres"——POSTGRES。据官方历史页(A Brief History of PostgreSQL):

对课题最关键的一点:POSTGRES 早期以"时间旅行(time travel)"方式保留行的历史版本来实现多版本可见性 ★——这正是后来 MVCC 与 VACUUM 的思想胚胎。课题中"为什么需要 VACUUM、为什么有 xmin/xmax"的历史根源都在这里(横向意义见 3.3 节)。

1.4 阶段三:Postgres95 与更名(1994–1996)——SQL 化与社区接管

伯克利放手后,1994 年两名学生 Andrew Yu 与 Jolly Chen 为 POSTGRES 加上了 SQL 解释器,替换掉 POSTQUEL,以 Postgres95 的名义开源发布到网络。官方历史页记载了这次改动的分量:代码改写为全 ANSI C 并精简 25%,在 Wisconsin Benchmark 上比 POSTGRES 4.2 快 30–50%,新增 GROUP BY、重写聚合函数、带来带 GNU Readline 的 psql、libpgtcl 客户端库、重做的大对象接口,并移除实例级规则系统(保留重写规则)。

1996 年,项目更名为 PostgreSQL,版本号重置为 6.0 以延续伯克利的编号序列,"Postgres" 保留为官方昵称;开发重心从"修补旧问题"转向"增加新能力"(官方历史页)。6.0 于 1997 年 1 月正式发布(版本策略页自 6.3 起有完整日期表)。主要参与者从伯克利课题组变为互联网上的松散黑客社区(Marc G. Fournier、Thomas G. Lockhart、Vadim Mikheev 等组成早期核心组 ★);驱动因素是开源协作模式与 SQL 标准的普及。

1.5 阶段四:社区化与技术地基(1997–2001)——MVCC 与 WAL 落地

这是对课题核心概念(事务、MVCC、事务日志)最要紧的一段:

1.6 阶段五:走向生产级(2002–2009)——PITR、Windows、全文检索进核心

这一阶段 PostgreSQL 从"学者与极客的数据库"变成"企业敢用的数据库":

驱动因素:企业市场要求高可用与可恢复性(PITR)、异构桌面环境(Windows)、以及"数据库能不能当搜索引擎用"(GIN + 核心化全文检索)。

1.7 阶段六:复制与 NoSQL 应对(2010–2014)——流复制与 jsonb

互联网爆发期,PostgreSQL 回答了两个生死问题:高可用与半结构化数据。

驱动因素:MongoDB 等文档数据库的冲击,让 PostgreSQL 选择"把文档模型吃进来"而不是丢掉关系内核;云时代的高可用则由流复制 + 复制槽组合回应。

1.8 阶段七:规模化(2015–2019)——并行查询、逻辑复制与 SQL/JSON

驱动因素:多核硬件普及倒逼并行化(9.6–11 一条完整的并行化弧线);JSON 业务从"存进去"进化到"按标准查出来"。

1.9 阶段八:成熟与当代(2020–2025)——13 到 18

1.10 生态与当下(2025–2026)——写作时点的最新状态

1.11 五个能力子专题编年小结(课题视角,另附并行化贯穿辅线)

主线关键节点
事务 / MVCCPOSTGRES 时间旅行雏形(1989–1994)→ MVCC 6.5(1999,Vadim Mikheev)→ WAL 7.1(2001)→ SAVEPOINT 8.0(2005)→ autovacuum 8.1 ★ → HOT 与异步提交 8.3(2008)→ VACUUM 内存降 20 倍 17(2024)→ AIO 18(2025)
索引B-tree 继承自 POSTGRES ★ → GiST 7.3 ★ → GIN 8.2(2006,Sigaev & Bartunov) → KNN-GiST 9.1 ★ / SP-GiST、仅索引扫描 9.2 ★ → BRIN 9.5(2016)→ 哈希索引崩溃安全 10 ★ → 并行建索引 11 ★ → B-tree 去重 13 ★ → 多列 B-tree skip scan 18(2025)
JSONBhstore(contrib,GIN 支持 8.3)→ json 类型 9.2 ★ → jsonb 9.4(2014-12-18) → jsonb_set 等 9.5 ★ → SQL/JSON Path 12(2019)→ JSON_TABLE 17(2024)
全文检索contrib tsearch/tsearch2(Sigaev & Bartunov)★ → 进核心 8.3(2008-02-04) → 词组搜索 <-> 9.6(2016)→ websearch_to_tsquery 11 ★
备份恢复pg_dump(Postgres95 起的传家宝)★ → PITR/WAL 归档 8.0(2005-01-19) → 流复制 9.0(2010)→ pg_basebackup 9.1(2011) → pg_verifybackup 13 ★ → 增量备份 + pg_combinebackup 17(2024)
并行化(贯穿辅线,非子专题)并行查询 9.6(2016)→ 并行索引扫描 10 ★ → 并行建索引/JIT 11 ★ → 并行 VACUUM 13 ★ → AIO 18(2025)

1.12 贯穿五十年的一条规律

回看全程,PostgreSQL 的每次跃迁几乎都遵循同一模式:学术原型给思想,社区给工程,外部压力给时机。MVCC 与 WAL 来自伯克利多版本思想与 Mikheev 的工程化;Windows 移植与 PITR 回应企业市场;jsonb 回应 NoSQL;并行查询与 AIO 回应硬件;增量备份与 skip scan 回应云规模数据。而本课题选取的五个能力子专题——事务/MVCC、索引、JSONB、全文检索、备份恢复(口径见 1.1)——恰好各占一个时代的关键落子:1999(MVCC)、2001(WAL)、2005(PITR)、2008(全文检索进核心)、2014(jsonb)、2016(BRIN/并行/词组搜索)、2017(逻辑复制)、2024(增量备份/JSON_TABLE)、2025(AIO/skip scan)。理解这串年份,比记住任何一个语法细节都更接近"深度入门"。


二、横轴:横向对比(2026-10-31 截面)

2.0 对比对象与维度的定义

本课题是"通用关系型数据库深度学习"课题,横轴对手分四组选取:

组别对手与课题的关系
最直接的同类对手MySQL(8.4 LTS / 26.x)、MariaDB同为开源 OLTP 关系库,争抢同一个"默认选择"位置
子专题能力对手MongoDB(对 JSONB)、Elasticsearch / OpenSearch(对全文检索)、Percona XtraBackup / binlog(对备份恢复)本课题五个能力子专题中三个(JSONB、全文检索、备份恢复)的对位竞品;事务/MVCC 与索引的对位竞品见 §2.2、§2.3 的对照列
商业参照系Oracle、Microsoft SQL ServerMVCC 实现与功能上限的参照
架构替代方案SQLite(嵌入式)、CockroachDB / TiDB / YugabyteDB(分布式 NewSQL)、ClickHouse / DuckDB(分析)回答"什么时候不该用 PostgreSQL"

对比维度与正文小节的对位如下(成熟度作为截面背景放在 2.1 最先呈现,不占用"维度 N"编号;"生态"维度对应水平扩展与兼容生态一节;"适用场景"以 2.9 速查表收束):

声明维度对应小节
成熟度(版本节奏、排名势能)§2.1(背景性维度,先行呈现,不占维度编号)
能力 · 事务与 MVCC§2.2(维度一)
能力 · 索引§2.3(维度二)
能力 · JSON/文档(JSONB)§2.4(维度三)
能力 · 全文检索§2.5(维度四)
能力 · 备份恢复§2.6(维度五)
生态(协议兼容、水平扩展、托管、扩展)§2.7(维度六)
成本(许可 + 运维)§2.8(维度七)
适用场景§2.9(选型结论速查表)

2.1 位置与势能:排名、开发者心智与版本节奏

DB-Engines 排名(2026 年 10 月,当日从 db-engines.com/en/ranking 直接抓取):

排名数据库分数同比(vs 2025-10)
1Oracle1119.79−92.98
2MySQL837.96−41.70
3Microsoft SQL Server694.47−20.58
4PostgreSQL688.75+45.56
5MongoDB374.64+6.63
8Redis156.09+13.76
11SQLite95.73−8.82
12Elasticsearch94.11−22.55
13MariaDB75.60−12.16
28OpenSearch22.72+3.42
41DuckDB11.43+2.50
70CockroachDB4.43−0.14
80TiDB3.33+0.14
117YugabyteDB2.21+0.08

逐项解读:

2.2 维度一:事务与 MVCC——"堆内多版本" vs "undo 派"

这是本课题最核心的子专题,也是 PostgreSQL 与所有主要对手实现差异最大的地方。

能力项PostgreSQLMySQL (InnoDB)OracleSQL ServerSQLite
MVCC 旧版本存放位置堆表内(元组带 xmin/xmax,旧版本原地留存)★独立 undo 日志/回滚段(记录含 ROLL_PTR 指向 undo)独立 undo 表空间tempdb 版本存储(row versioning)★无服务器内 MVCC,WAL 下读写并发、写串行
回滚成本即时(旧数据从未被覆盖)需沿 undo 链逐行回放,大事务回滚慢类 InnoDB(undo)★类 InnoDB ★恢复上次快照
清理机制VACUUM / autovacuum(回收死元组、防 XID 回卷)purge 线程清理 undoSMON/purge ★版本清理 ★WAL checkpoint
典型失效模式表膨胀、长事务阻塞 vacuum、XID 回卷风险undo 无限增长、history list length 飙升同 InnoDB 类 ★tempdb 压力 ★写入吞吐受限
默认隔离级别READ COMMITTED,原生支持可串行化(SSI)★REPEATABLE READ,无原生串行化READ COMMITTED ★READ COMMITTED ★串行化语义

关键事实与来源:

2.3 维度二:索引——类型数量与表达力的代差

能力项PostgreSQLMySQL (InnoDB)MongoDBElasticsearch
B 树类B-tree(PG 18 支持多列跳跃扫描)B+tree(聚簇主键组织)★B-tree 类 ★倒排索引 + doc values 列存 ★
倒排/全文索引GIN(可服务 JSONB 与 tsvector)FULLTEXT(ngram 分词需配置)★text 索引 ★核心能力
空间索引GiST / SP-GiST(配 PostGIS)spatial index(R-tree 变体)★2dsphere ★geo 能力
区间/时序BRIN(块级范围,TB 级表极小)★无对等物——
哈希等值Hash 索引(10+ 后可用于查询计划)★无(自适应哈希为内部机制)★hashed 索引 ★—
部分索引/表达式索引/INCLUDE原生支持★函数索引有限、无部分索引 ★部分索引有—
在线建索引CREATE INDEX CONCURRENTLY(8.2 起,见纵轴 1.6)★原生在线 DDL ★后台构建—

关键事实与来源:

2.4 维度三:JSONB——"关系为主、文档为辅"的最强答案

能力项PostgreSQL JSONBMySQL JSONMongoDB
存储解析后二进制(TOAST 外置)解析后内部二进制BSON 原生,文档即表
定位关系表中的列类型,schema 仍是根基同左文档数据库,灵活 schema 是根基
索引GIN 索引对 JSONB 内每个键/值建索引项,支持 @>、? 等包含查询;jsonb_path_ops 加速 JSONPath多值索引 / 函数索引 / 虚拟列提取仅对显式建索引的字段建索引
查询语言完整 SQL + JSONPath(SQL/JSON 标准)JSON_EXTRACT、->、->> 运算符专有查询语言 + 聚合管道
更新语义整文档重写(非 in-place)整文档重写 ★多场景 in-place 更新
基准参考查询重的工作负载常不落下风能力弱于 JSONB个别 2026 年基准中批量插入更快(115/s vs 81/s,单个基准,非普适)

关键事实与来源:

2.5 维度四:全文检索——内置 FTS、ES 与中间路线的三方博弈

能力项PostgreSQL 内置 FTSMySQL FULLTEXTElasticsearch / OpenSearchpg_search(ParadeDB 扩展)
引入方式8.3(2008)起内置核心,零部署内置但功能较弱独立集群 + 数据同步管道PG 扩展(Tantivy 内核,BM25)
索引结构tsvector + GIN ★倒排(实现较老)★倒排 + 列存Tantivy 倒排
相关性调优ts_rank(A/B/C/D 权重)、改写查询有限最丰富(BM25 参数、分析器、聚合、模糊容错)BM25
规模化单写节点 + 只读副本 ★同左分片水平扩展随 PG 而定
中文支持需 zhparser/pg_jieba 等扩展 ★ngram ★ICU/插件丰富依赖 Tantivy 分词
混合检索(词法+向量)FTS + pgvector 同库同查询 ★弱BM25 + kNN 原生与 pgvector 同库

关键事实与来源:

2.6 维度五:备份恢复——WAL 一等公民 vs 工具链外挂

能力项PostgreSQLMySQLMongoDB
逻辑备份pg_dump / pg_dumpall(内置)mysqldump / MySQL Shell dump utilitiesmongodump
物理备份pg_basebackup(内置)Percona XtraBackup(第三方)/Clone Plugin(8.0+)★文件系统快照 / Percona Backup for MongoDB
时间点恢复(PITR)WAL 归档 + recovery_target_time,一等公民binlog 重放至时间点,成熟oplog 重放 ★
增量备份PG 17 起原生支持:pg_basebackup --incremental + pg_combinebackup 合并XtraBackup 支持增量 ★视方案而定
云原生归档pgBackRest / WAL-G 直写 S3/Azure/GCSbinlog + 自建脚本或托管方案Atlas 快照(托管)

关键事实与来源:

2.7 维度六:水平扩展与"PostgreSQL 兼容"生态

2.8 维度七:许可、成本与治理

维度PostgreSQLMySQLMongoDB / Elasticsearch
社区版许可PostgreSQL License(BSD/MIT 类,极宽松,可嵌入闭源分发且无开源义务)GPLv2 / 商业双许可(闭源分发需向 Oracle 购买商业授权)MongoDB SSPL(非 OSI 开源定义);Elasticsearch 已回 AGPL(2024 起)★
物理分叉风险无单一厂商控制,社区治理Oracle 单一控制厂商主导
托管云成本RDS/Cloud SQL 上同规格定价与其他主流引擎相当;Aurora/AlloyDB 走溢价路线(定性表述)同左Atlas/Elastic Cloud 溢价明显(定性表述)
运维技能成本autovacuum 调优、年度大版本升级(扩展需同步适配)主从/binlog 运维体系成熟、分库分表生态丰富集群运维重
人才市场需求随排名与云采用持续上升(见 2.1 节)存量巨大稳定

关键事实与来源:

2.9 选型结论速查表

场景建议理由(对应上文维度)
默认通用 OLTP、未来需求不确定PostgreSQL能力面最宽(§2.2–§2.6),生态上升势能最强(§2.1),许可最自由(§2.8)
已有成熟 MySQL 运维体系、读写模式简单MySQL 8.4 LTS 可接受存量人才与工具链成熟;但注意 8.0 EOL 与版本碎片化(§2.1)
"关系骨架 + 半结构化字段"PostgreSQL(JSONB + GIN)§2.4:GIN 逐键值索引 + SQL/JSON 标准,MongoDB 的独有优势只剩写入水平扩展
文档优先 + 海量写入需分片MongoDB§2.4:BSON 原生、in-place 更新、分片内建
中小规模站内搜索(数据已在 PG、检索需求中等)先试 PG 内置 FTS§2.5:89ms P95 量级够用、免第二套系统与同步管道
大规模搜索/复杂相关性/日志分析Elasticsearch / OpenSearch§2.5:分片扩展、BM25 调优、聚合生态
全球分布式、强一致、多区域写CockroachDB / YugabyteDB§2.7:PostgreSQL 兼容使其成为 PG 的"水平扩展出口"而非彻底替换
单机应用、嵌入式、边缘SQLite更轻;PG 的 MVCC/备份知识可部分迁移但架构不同
纯分析/HTAPClickHouse / DuckDBPG 行存 OLTP 架构非为此设计(★)

一句话总结横轴结论:在 2026 年 10 月这个截面,PostgreSQL 是"默认应当学习并首选"的通用数据库——不是因为它在每个单项上都赢,而是因为它在每个单项上都没有明显短板,并且整个行业正在向它的接口收敛。


三、交叉洞察:两轴结合说明了什么

3.1 洞察一:时间线与竞争面是同一条线

把纵轴的编年与横轴的对比放在一起看,会发现本课题的五个能力子专题(事务与 MVCC 合为一项;并行化为贯穿辅线,不单列)每个都同时是历史上的"外部冲击回应点"和横向上的"差异化边界":

子专题纵轴(回应了什么冲击)横轴(拉开了什么差距)
事务 / MVCC企业生产化的崩溃安全需求 → WAL(2001);自治运维需求 → autovacuum(2005★)、VACUUM 重写(2024)与 InnoDB/Oracle 的"堆内多版本 vs undo 派"是业界最大的 MVCC 架构分野(§2.2)
索引"数据库能否当搜索引擎用"→ GIN(2006);TB 级表 → BRIN(2016);新硬件 → skip scan(2025)6 种访问方法覆盖多负载,MySQL 只有 B+tree 一族(§2.3)
JSONBMongoDB 为代表的 NoSQL 浪潮 → json(2012)、jsonb(2014)、SQL/JSON Path(2019)、JSON_TABLE(2024)"关系骨架 + 半结构化字段"场景几乎无对手,MongoDB 独剩写入水平扩展(§2.4)
全文检索站内搜索需求 → tsearch2 进核心(2008)、词组搜索(2016)中小规模搜索"内化"路线与 ES 人气分下滑趋势一致(ES 同比 −22.55,§2.5;人气分下滑≠份额转移)
备份恢复企业可恢复性需求 → PITR(2005);云规模 → 原生增量备份(2024)WAL 一等公民、能力进发行版本身,MySQL 依赖第三方 XtraBackup(§2.6)

这张表是全报告的核心:PostgreSQL 的长期主义,就是把每一次竞争压力都变成内置能力。NoSQL 来了,它把文档模型吃进来;搜索引擎火了,它把倒排索引放进核心;云时代到了,它把增量备份做成原生功能。时间线上每一次"回应外部压力",都转化为横轴上的一块护城河。这一机制与它在 DB-Engines 前四名中独享正增长的表现趋势一致——对手要么被它吸收(MongoDB/ES 的传统场景),要么选择兼容它(CockroachDB/YugabyteDB/云托管层)。需要如实说明:这是一个与数据相容的解释,不是已证因果——第 5 名 MongoDB 同比同样为正(+6.63),本文也没有将排名增长量化归因于这一机制的数据。

3.2 洞察二:两个枢纽概念——GIN 与 WAL

五个能力子专题并非并列关系,内部有两个枢纽:

对学习者的推论:这两个概念的投入产出比最高,值得花双倍时间;其余章节都可以沿着它们向下展开。

3.3 洞察三:MVCC 是资产也是债务——历史决定运维

纵轴的起点(1989 年 POSTGRES 的"时间旅行"设计)决定了横轴上最深的架构分野:因为选择了"旧版本留在堆内",PostgreSQL 换来了即时回滚、读写不互斥;也因此背上了表膨胀、autovacuum 调优、XID 回卷三座运维大山(§2.2)。POSTGRES 时代的"时间旅行"功能后来被移除,但它的存储遗产(xmin/xmax + VACUUM)服务到了今天——17 版本重写 VACUUM(内存最多降 20 倍)、18 版本用 AIO 加速它,都是在对 1989 年的设计决策还债与增值。

对用户的实际含义:选 PostgreSQL 就是选一种运维手艺。日常要盯死元组率、长事务、XID 余量;收益是不需要为回滚和高并发读写付 undo 成本。MySQL 用户则相反——写入路径永远背着 undo,但日常没有 vacuum 负担。没有绝对优劣,只有代价放在哪里的差别;但你的 DBA 技能投资会长期锁定在这套机制上,这也是"深度入门"课题选择 MVCC 作为第一课的原因。

3.4 对用户的判断与建议

综合两轴证据,给出五条可执行建议:

  1. 默认选择 PostgreSQL,把它作为"第一门深入学的数据库"。证据链:能力面最宽(§2.2–§2.6 无明显短板)、势能最强(前四名唯一正增长 + Stack Overflow 三项第一,§2.1)、许可最自由(可嵌入闭源产品,§2.8)、且整个行业正在向它的接口收敛(NewSQL/云托管/DocumentDB 兼容层,§1.10、§2.7)。学它得到的不是一门技能,而是一张生态门票。
  2. 按"MVCC → 索引 → JSONB → 全文检索 → 备份恢复"的顺序学习。每一步都是前一步的下游消费者(VACUUM 依赖 MVCC、GIN 服务 JSONB/FTS、WAL 支撑备份),且每一步都能在 MySQL/MongoDB/ES 上找到对照实现(§2.2–§2.6 的对比表),形成"学一个、懂一类"的迁移结构。优先吃透 GIN 与 WAL 两个枢纽(§3.2);每个专题的第一步动手命令见"四、延伸阅读与常见追问"。
  3. 场景化选型不教条:关系骨架 + 半结构化字段用 JSONB,中小规模搜索留在库内(先试内置 FTS,极限时用 pg_search 过渡),文档优先 + 写入分片才上 MongoDB,大规模搜索/复杂相关性才上 ES,全球分布式强一致用 CockroachDB/YugabyteDB 这类"PG 兼容出口"(§2.9 速查表)。
  4. 运维重心与版本策略:日常监控 autovacuum、长事务与 XID 余量(§3.3;具体指标、默认阈值与命令见"四、延伸阅读与常见追问"Q2);跟随"年更大版本 + 最新 minor"节奏,PG 19 计划 2026-11-19 GA,升级前确认扩展同步适配;备份必须做恢复演练——PG17 增量备份不能直接用、必须先 pg_combinebackup 合并(§2.6),这类细节只有演练过才可靠。
  5. 对数字保持工作负载敏感性:本报告引用的所有性能基准(ES 快 3–10 倍、Mongo 批量插入 115/s vs 81/s、AIO 顺序扫描 2–3 倍)都是特定负载下的个案,不可外推;云定价刻意不给具体数字;标注 ★ 的条目引用前请复核。同时保留一条方法学教训:本次写作中"pgBackRest 停止维护"的传闻经直接抓取 GitHub 证伪(§2.6)——工具状态类结论永远以官方仓库为准。

四、延伸阅读与常见追问

正文两处宣讲了「MVCC → 索引 → JSONB → 全文检索 → 备份恢复」的学习顺序(TL;DR 与 §3.4),本节把读者读完最自然会问的四个「下一步」逐条给出,全部指向官方文档与可直接执行的命令(本节引用的官方文档均于 2026-11-01 修订时访问核验,见参考来源 F 组):

Q1:MVCC / xmin-xmax 到底怎么运作?

Q2:autovacuum 日常盯哪些指标与阈值?

Q3:pg_basebackup --incremental + pg_combinebackup 怎么演练?

# 1) 先做一次全量(-Fp 目录格式,便于查看 manifest 与后续合并)
pg_basebackup -D /backup/full -Fp -Xs -P

# 2) 数据变动后做增量:--incremental 指向上一次备份的 backup_manifest(须来自同一服务器)
pg_basebackup -D /backup/inc1 -Fp -Xs -P --incremental=/backup/full/backup_manifest

# 3) 校验全量备份
pg_verifybackup /backup/full

# 4) 合并:按"从旧到新"的顺序列出全部备份,合成一个"合成全量",-o 指定输出目录
pg_combinebackup /backup/full /backup/inc1 -o /backup/restore

# 5) 恢复演练:把 /backup/restore 作为数据目录,配置 restore_command 与恢复目标后启动,
#    验证能否恢复到指定时间点(对应正文 §2.6 的 PITR 链路)

Q4:JSONB 建索引,GIN 默认算子类与 jsonb_path_ops 怎么选?


五、参考来源

A. 当日直接抓取验证(2026-10-31)

  1. DB-Engines Ranking(2026 年 10 月):https://db-engines.com/en/ranking
  2. PostgreSQL 官网版本信息(18.6 / 17.11 / 16.15):https://www.postgresql.org/
  3. MySQL 下载页(26.10.0 Innovation GA / 26.7.0 LTS GA):https://dev.mysql.com/downloads/mysql/
  4. pgBackRest GitHub 仓库(v2.59.2,2026-09-27;证伪"停止维护"传闻):https://github.com/pgbackrest/pgbackrest

B. PostgreSQL 官方文档与发布说明

  1. 官方历史页(POSTGRES/Postgres95/更名全过程):https://www.postgresql.org/docs/current/history.html
  2. 官方版本支持策略页(6.3–18 全部大版本发布日期、年更与 5 年支持节奏):https://www.postgresql.org/support/versioning/
  3. PostgreSQL 6.5 文档 MVCC 章(Vadim Mikheev):https://pg.center/docs/6.5/mvcc.htm
  4. PostgreSQL 7.1 文档 WAL 章(Mikheev & Elphick):https://www.postgresql.org/docs/7.1/wal.html
  5. PostgreSQL 7.1.0 发布说明(WAL、TOAST):https://www.postgresql.org/docs/release/7.1.0
  6. PostgreSQL 8.0 发布说明(Windows、SAVEPOINT、PITR):https://www.postgresql.org/docs/8.0/release.html
  7. PostgreSQL 8.2 发布公告(GIN、在线建索引):https://www.postgresql.org/about/news/2006/12/05/ ;8.2 发布说明:https://www.postgresql.org/docs/8.2/release-8-2.html
  8. PostgreSQL 8.3 发布说明(全文检索进核心、HOT、异步提交):https://www.postgresql.org/docs/8.3/release-8-3.html
  9. PostgreSQL 9.0 发布说明(流复制、热备):https://www.postgresql.org/docs/9.0/release-9-0.html
  10. PostgreSQL 9.1 发布说明(pg_basebackup、同步复制):https://www.postgresql.org/docs/9.1/release-9-1.html
  11. PostgreSQL 9.4 发布说明(jsonb 署名与原文表述、逻辑解码、复制槽):https://www.postgresql.org/docs/9.4/release-9-4.html
  12. PostgreSQL 9.6 发布新闻(并行查询、词组搜索):https://www.postgresql.org/about/news/1693/ ;9.6 发布说明:https://www.postgresql.org/docs/9.6/release-9-6.html
  13. PostgreSQL 12 发布说明(SQL/JSON Path、生成列):https://www.postgresql.org/docs/12/release-12.html
  14. PostgreSQL 17 发布说明(增量备份、pg_combinebackup、VACUUM 内存、JSON_TABLE):https://www.postgresql.org/docs/17/release-17.html
  15. PostgreSQL 18 发布新闻(AIO、skip scan、UUIDv7、OAuth):https://www.postgresql.org/about/news/postgresql-18-released-3142 及 https://www.postgresql.org/docs/release/18.0
  16. PostgreSQL 19 Beta 信息页与 RC1 公告(2026-06-04 Beta1、2026-10-15 RC1、计划 2026-11-19 GA):https://www.postgresql.org/developer/beta 、https://www.postgresql.org/about/news/postgresql-19-rc-1-released-3409

C. 历史与行业地位

  1. Ingres 历史(Stonebraker/Wong,1972–1973 启动、1976 TODS 论文):https://homes.cs.washington.edu/~lazowska/cra/database.html 、https://www.cs.cmu.edu/~natassa/courses/15-721/papers/p189-stonebraker.pdf
  2. DB-Engines "DBMS of the Year 2024"(第五次夺冠):https://www.optimadata.nl/en/nieuws/postgresql-dbms-of-the-year-2024
  3. Stack Overflow 2025 开发者调查(最常用/最受喜爱/最想要):https://survey.stackoverflow.co/2025/technology
  4. Microsoft DocumentDB 捐赠 Linux 基金会(2025-08-25 宣布):Linux Foundation 新闻稿 https://www.linuxfoundation.org/press/linux-foundation-welcomes-documentdb-to-advance-open-developer-first-nosql-innovation 、Microsoft 开源博客 https://opensource.microsoft.com/blog/2025/08/25/documentdb-joins-the-linux-foundation 、The New Stack 报道 https://thenewstack.io/linux-foundation-opens-the-door-to-documentdb

D. 横向对比来源

  1. MySQL Innovation/LTS 模型与 8.0 EOL:https://dev.mysql.com/doc/refman/9.3/en/mysql-releases.html 、https://dev.mysql.com/blog-archive/introducing-mysql-innovation-and-long-term-support-lts-versions ;PG 18 解读:https://www.bytebase.com/blog/what-is-new-in-postgres-18
  2. MVCC 实现对比(堆内多版本 vs undo):http://amitkapila16.blogspot.com/2015/03/different-approaches-for-mvcc-used-in.html 、https://www.reddit.com/r/PostgreSQL/comments/te9za5/what_are_the_tradeoffs_between_postgresqls_and ;Robert Haas《MySQL vs. PostgreSQL, Part 2: VACUUM vs. Purge》(2011-02):http://rhaas.blogspot.com/2011/02/mysql-vs-postgresql-part-2-vacuum-vs.html (2026-11-01 修订时经网络检索定位原文链接;blogspot 域在修订环境内无法直连复核全文,特此说明)
  3. PG 17 增量备份实操:https://www.postgresql.org/docs/current/app-pgbasebackup.html 、https://pgdash.io/blog/incremental-backup-in-postgresql-17.html 、https://www.mydbops.com/blog/postgresql-17-incremental-backup-pg-basebackup-pg-combinebackup
  4. 备份工具对比:https://www.percona.com/blog/postgresql-backup-strategy-enterprise-grade-environment 、https://severalnines.com/blog/top-backup-tools-postgresql 、https://github.com/cybertec-postgresql/pg_hardstorage/blob/main/docs/explanation/comparison-pgbackrest-walg-barman.md 、https://dev.to/piteradyson/postgresql-backup-tools-comparison-databasus-wal-g-pgbackrest-and-barman-2kg
  5. 全文检索对比:https://neon.com/blog/postgres-full-text-search-vs-elasticsearch 、https://navanathjadhav.medium.com/postgresql-full-text-search-vs-elasticsearch-i-ran-both-for-6-months-a585f60c8a5d 、https://stackoverflow.com/questions/58812324/postgresqlfull-text-search-vs-elasticsearch
  6. JSONB 对比:https://www.solarwinds.com/blog/json-support-in-postgresql-mysql-mongodb-and-sql-server 、https://www.slideshare.net/slideshow/working-with-json-data-in-postgresql-vs-mongodb/237002539 、https://dev.to/dbvismarketing/json-vs-jsonb-in-postgresql-for-database-development-1hbp 、https://www.reddit.com/r/programming/comments/1rjoo6e/json_documents_performance_storage_and_search 、https://medium.com/@krpsanthoshkumar/mongodb-vs-postgresql-jsonb-which-one-should-you-choose-for-storing-json-data-628aa21cf599
  7. 许可对比:https://www.runxbuild.com/blog/postgresql-license 、https://dev.to/piteradyson/mysql-vs-postgresql-in-2026-7-key-differences-you-should-know-before-choosing-4l9d 、https://acemq.com/compare/postgresql-vs-mysql 、https://www.postgresql.org/about/feature/matrix/

E. 标注为 ★ 的条目(未在本次会话逐条核验)

  1. 各数据库隔离级别默认值、SQL Server 版本存储、SQLite 串行写模型、PostgreSQL 索引访问方法清单与各版本归属(GiST 7.3、KNN-GiST 9.1、SP-GiST 9.2、哈希索引 10、并行建索引 11、B-tree 去重 13、pg_verifybackup 13、multirange/LZ4/ZSTD 14、MERGE 15、pg_stat_io 16、websearch_to_tsquery 11、jsonb_set 9.5、autovacuum 8.1、7.3/7.4/8.4 特性、早期核心组成员)、B-tree 继承自 POSTGRES、pg_dump 起于 Postgres95、contrib tsearch/tsearch2(Sigaev & Bartunov)、InnoDB 聚簇组织、BSON in-place 更新、MongoDB/Elasticsearch 许可演变、分片与复制架构描述等。引用时请注意复核。

F. 2026-11-01 修订时新增/核验的官方文档("四、延伸阅读与常见追问"及修订处引用)

  1. 官方 MVCC 章(xmin/xmax、快照与可见性):https://www.postgresql.org/docs/current/mvcc.html
  2. Routine Vacuuming(XID 回卷保护梯级:剩 4000 万事务告警、剩量不足 300 万拒绝分配新事务 ID;autovacuum_freeze_max_age 强制防回卷清理):https://www.postgresql.org/docs/current/routine-vacuuming.html
  3. autovacuum 参数默认值(vacuum 50/0.2、analyze 50/0.1、insert 1000/0.2、freeze_max_age 默认 2 亿):https://www.postgresql.org/docs/current/runtime-config-autovacuum.html
  4. 增量备份与合并:25.3.3 Making an Incremental Backup(https://www.postgresql.org/docs/current/continuous-archiving.html ,WAL 摘要存于 pg_wal/summaries、缺失则增量备份失败)、pg_basebackup --incremental(https://www.postgresql.org/docs/current/app-pgbasebackup.html ,--incremental 指向上一次备份的 manifest,仅服务器 17+)、pg_combinebackup(https://www.postgresql.org/docs/current/app-pgcombinebackup.html ,输入目录从旧到新排列,-o 指定输出目录)
  5. JSON Types(jsonb GIN 算子类:jsonb_ops 支持 ?/?|/?& 与 @>/@?/@@;jsonb_path_ops 不支持键存在性操作符、索引通常更小):https://www.postgresql.org/docs/current/datatype-json.html
  6. PostgreSQL 9.5 发布说明(UPSERT、BRIN、RLS):https://www.postgresql.org/docs/9.5/release-9-5.html

附录 A:两稿合并的口径统一说明

本节原为「三、交叉洞察」的首节(编辑性说明,不属洞察内容),按审读意见移至文末作为附录,不再占用洞察编号;正文"报告性质"处的引用已同步改指本附录。

两份章节稿在合并前存在少量口径差异与大量重复,本稿统一如下:

  1. 版本口径:纵轴表述为"最新大版本为 PostgreSQL 18(2025-09-25)",横轴表述为"当前稳定版本 18.6(另有 17.11、16.15)"。两者不矛盾,是同一事实的不同粒度。本稿统一为:最新大版本线为 18(2025-09-25 发布),当前稳定 minor 为 18.6;PostgreSQL 19 处于 RC 阶段(RC 1 于 2026-10-15 发布,计划 2026-11-19 GA)(见 1.10 节)。
  2. 重复内容归并:PG 18 的旗舰特性(AIO、skip scan、UUIDv7、OAuth 2.0、WITHOUT OVERLAPS、备库逻辑复制)在两稿中各展开一次,本稿在纵轴 1.9 节一次讲透,横轴仅在 MVCC(恢复时间)与索引(skip scan)维度引用;PITR/pg_basebackup/PG17 增量备份在纵轴讲"何时出现"(编年),横轴讲"横向位置"(与 MySQL/XtraBackup 对比),两处互相引用而不重复展开。GIN/全文检索/jsonb 的版本日期统一以纵轴编年为准。
  3. JSONB 性能口径:横轴两处性能结论(查询型负载 PG 不落下风;2026 年单一基准 MongoDB 批量插入更快,115/s vs 81/s)均保留,并统一标注"单一基准、负载敏感、不可外推为普适结论"。纵轴无此内容,无冲突。
  4. 全文检索口径:横轴"ES 快 3–10 倍(六个月双跑个案)"与"PG 简单检索 P95 约 89ms 够用"不是矛盾而是互补,本稿统一为按规模分层的选型规则(见 2.5 节),不做二选一。
  5. pgBackRest 维护状态:检索摘要曾声称"pgBackRest 自 2026 年 4 月起停止维护",当日直接抓取其 GitHub 仓库证伪(v2.59.2,2026-09-27 发布,7/8/9 月均有发布记录)。本稿以仓库为准,并保留此核查记录作为方法示范(见 2.6 节)。
  6. 标注体系统一:纵轴的 ★ 与横轴的【模型知识】统一为 ★,含义为"社区公认事实,未在本次会话逐条核验";其余事实均附当日来源链接。
  7. DB-Engines 双口径互补:纵轴引用"DBMS of the Year 2024(第五次夺冠)",横轴引用"2026 年 10 月排名",本稿合并为"奖项证明长期势头 + 当月排名证明势头延续"的完整叙事(见 1.10 与 2.1 节)。

(完。本报告为按独立审读意见修订后的最终稿;两稿合并的口径统一说明见附录 A,读者下一步的动手入口见"四、延伸阅读与常见追问"。)

思考题(读完后想一想,参考答案可展开)

  1. 报告为什么建议把 PostgreSQL 作为「默认应当学习并首选」的数据库?其五十年发展遵循什么规律?
    参考答案

    五十年主线是「学术原型给思想、社区给工程、外部压力给时机」:MVCC(1999)、WAL(2001)、PITR(2005)、全文检索进核心(2008)、jsonb(2014)、增量备份(2024)每次跃迁都是对外部冲击的回应。2026 年 10 月它居 DB-Engines 第 4、前四名中唯一正增长(+45.56),也是 Stack Overflow 2025 最常用数据库。选它不因单项全赢,而因没有明显短板、许可宽松,且行业正向其接口收敛。

  2. 在 JSONB 与全文检索两个维度上,PostgreSQL 与 MongoDB、Elasticsearch 的适用边界分别如何划分?
    参考答案

    JSONB 定位是「关系骨架+半结构化字段」:GIN 为文档内每个键值建索引项,支持 @> 等包含查询,配合 SQL/JSON 标准,几乎无对手;MongoDB 独剩 BSON 原生、in-place 更新与写入水平扩展。全文检索:PG 内置 FTS 自 8.3 起零部署,实测简单关键词检索 P95 约 89ms 对多数应用够用;ES 在多数查询类型快 3–10 倍且有最丰富的相关性调优,需要高吞吐、复杂调优、聚合分析才值得引入同步管道。中间态可用 pg_search(BM25/Tantivy)过渡。

  3. 报告说「MVCC 是资产也是债务」:选 PostgreSQL 意味着承担哪些运维代价?与 MySQL 的代价分布有何不同?
    参考答案

    因旧版本留在堆内,PostgreSQL 换来即时回滚与读写不互斥,但背上表膨胀、autovacuum 调优、XID 回卷三座大山:XID 为 32 位,距回卷点剩 4000 万事务时告警、不足 300 万时库变只读,长事务会阻塞 vacuum。MySQL 相反——写入路径永远背 undo、大事务回滚慢,但日常无 vacuum 负担。代价只是放在不同位置,且 DBA 技能投资会长期锁定在所选机制上,日常须盯死元组率、长事务与 XID 余量。

  4. 报告建议的五个子专题学习顺序是什么?为什么 GIN 与 WAL 两个枢纽概念值得投入双倍时间?
    参考答案

    按「MVCC→索引→JSONB→全文检索→备份恢复」推进,每步是前一步的下游消费者(VACUUM 依赖 MVCC、GIN 服务 JSONB/FTS、WAL 支撑备份)。GIN 是索引×JSONB×全文检索的枢纽,先吃透倒排原理,后两章只剩语法;WAL 是事务×备份×复制×逻辑解码的枢纽——PITR、流复制、逻辑解码本质都是「把 WAL 流给出去」。运维上日常监控 autovacuum、长事务与 XID 余量;备份必须做恢复演练,PG17 增量备份不能直接用、须先 pg_combinebackup 合并。

← 资料库今日播报 →