主题
PgSQL 学习路线:从索引到 AI 数据层
适用 PostgreSQL 16/17。pgvector、zhparser、pg_jieba、Citus、TimescaleDB 等扩展的版本与默认值,以各自文档为准。
这套内容按「查询怎么走 → 并发怎么控 → 故障怎么恢复 → 能力怎么扩」组织。先读索引和执行计划,再看 MVCC 与锁,最后进入复制、备份、监控和扩展。每一篇都按「一句话、为什么需要、核心机制、最小上手、生产动作、边界、讲清楚」写,命令默认可以直接复制。
篇目与权重
| 编号 | 篇目 | 权重 | 读它是为了解决 |
|---|---|---|---|
| 01 | 索引类型与优化 | ★★★ | 什么查询形态该建什么索引,为什么建了还用不上 |
| 02 | 查询优化与执行计划 | ★★★ | 看懂 EXPLAIN (ANALYZE, BUFFERS),定位慢在扫描、连接还是排序 |
| 03 | 高可用与复制 | ★★★ | 主库挂了怎么切、会丢多少数据、脑裂怎么收 |
| 04 | 分区表与扩展 | ★★ | 大表怎么按时间拆、约束有哪些限制、分区怎么维护 |
| 05 | JSON与全文检索 | ★★ | JSONB 怎么建索引、中文怎么分词、GIN 什么时候失效 |
| 06 | pgvector向量检索 | ★★★ | 向量列、HNSW/IVFFlat 参数、召回怎么测 |
| 07 | PgSQL-vs-MySQL | ★★★ | 两条存储引擎路线的差异,选型看什么指标 |
| 08 | 性能调优 | ★★★ | 参数默认值、怎么改、影响面是什么 |
| 09 | AI数据架构选型 | ★★ | 向量和业务数据要不要同库,混合检索怎么写 |
| 10 | MySQL迁移PgSQL | ★★ | 类型、大小写、自增、事务差异逐项怎么处理 |
| 11 | 事务隔离与MVCC | ★★★ | 快照、可见性、RR 到底防不防幻读、膨胀从哪来 |
| 12 | 锁机制 | ★★★ | 表锁/行锁冲突、锁超时、死锁牺牲谁、咨询锁怎么用 |
| 13 | 备份恢复与运维 | ★★★ | 逻辑/物理备份、PITR、RPO/RTO、日常排障 |
| 14 | PgSQL与AI | ★★★ | 它在 RAG 链路里的角色、新负载、能力边界与选型 |
| 15 | 监控指标与告警 | ★★★ | 盯哪些指标、WAL/死元组/连接怎么雪崩、先保护什么 |
三条阅读路径
- 业务排障:01 索引 → 02 执行计划 → 08 性能调优 → 12 锁 → 13 备份与运维。
- 机制深入:11 MVCC → 12 锁 → 01 索引 → 02 执行计划 → 03 复制。
- AI 场景:06 pgvector → 14 PgSQL 与 AI → 09 数据架构选型 → 05 全文检索与 JSONB。
- 稳定性运维:15 监控与告警 → 13 备份与运维 → 12 锁 → 03 复制。
按问题查
| 你现在的问题 | 先看 |
|---|---|
| 查询慢,不知道有没有走索引 | 01、02 |
| 表越来越大,DELETE 后空间不回收 | 11、13 |
| DDL 卡住、应用报锁等待 | 12 |
| 主库切换后不知道丢没丢数据 | 03、13 |
| JSONB 或中文搜索慢 | 05 |
| 向量召回不稳定 | 06、09、14 |
| 要不要从 MySQL 迁 | 07、10 |
| 参数怎么调 | 08、99 |
| 怎么设监控、雪崩前该看什么 | 15 |
| WAL 或复制槽把磁盘写满 | 15、13 |
怎么用这套内容
- 每篇先读「一句话」和「为什么需要」,判断是否与你的问题相关。
- 「最小上手」里的命令可以直接复制;先在小库或测试实例验证。
- 「生产动作」按「现象 → 命令 → 判断」组织,排障时从现象倒查。
- 「边界」列的是不该用的场景;选型时先看它,再看优点。
版本与前提
- 正文默认 PostgreSQL 16/17;更早版本注意
pg_stat_statements字段名、recovery.signal、分区与索引语法差异。 - pgvector、zhparser、pg_jieba、Citus、TimescaleDB 不是内核自带,安装方式与默认值以扩展文档为准。
- 示例中的主机、路径、库名是占位符,复制前替换。
上线前的最低要求
- 读完 12 和 13:知道 DDL 会拿什么锁、备份能不能在约定 RPO/RTO 内恢复。
- 过一遍 99-生产检查清单:它只管「不做会出事」的动作,机制解释在正文。
- 把核心查询逐条跑
EXPLAIN (ANALYZE, BUFFERS),确认没有大表Seq Scan、排序没有落盘。 - 至少做一次真实恢复演练,而不是只看备份文件存在。
- 按 15 篇把连接、复制槽、死元组、WAL 与 checkpoint 的告警接上;阈值先用起点值,再按基线校准。
一句话定位
PostgreSQL 的核心不是「功能多」,而是把向量、JSON、全文、地理空间都做成普通列和普通索引,和业务数据共享事务。这决定了它在 AI 场景里的位置:千万级以内、过滤条件复杂、要求事务一致时,不必为了向量单独引入一个系统;规模或隔离要求超出单机,再拆给专用向量库。