PostgreSQL 实战指南
PostgreSQL Mastery: Database Design, Query Optimization, and Production Operations
你已经能写 SELECT * FROM users WHERE id = 1。但当数据量到百万行时查询开始变慢,你不知道该加什么索引;Schema 越来越乱,字段类型靠直觉选;遇到生产环境的慢查询,只会加索引但看不懂 EXPLAIN;想给运行中的大表加列,不知道会不会锁表……
这本书解决这些问题。
PostgreSQL 不只是"另一个关系数据库"。它有 JSONB、全文搜索、pgvector 向量检索、强大的窗口函数、MVCC 并发控制——这些功能让许多人原本需要额外引入 MongoDB、Elasticsearch、向量数据库、分析数据库的场景,在 PostgreSQL 一个系统里就能解决。
你会学到什么
数据库能力成长路径:
能写 CRUD 生产级数据库工程师
(会 SELECT/INSERT) ───────→ (Schema 设计 + 查询优化 + 运维管理)
本书带你走完
这段路程
- 快速起步:macOS/Ubuntu 安装、psql 基础操作、pg_hba.conf 认证配置
- Schema 设计:数据类型选择(UUID vs SERIAL、JSONB vs TEXT)、主键策略、约束设计
- 索引与优化:B-tree/GIN/GiST 索引对比、EXPLAIN ANALYZE 解读、覆盖索引
- 高级查询:CTE(公共表表达式)、递归查询、窗口函数(ROW_NUMBER、LEAD、LAG)
- JSONB:半结构化数据存储、GIN 加速查询、与 MongoDB 的对比
- 并发控制:MVCC 原理、事务隔离级别、避免死锁、autovacuum 调优
- 全文搜索 + pgvector:中文分词、向量相似搜索(RAG 应用基础)
- 备份与高可用:pg_dump、流复制主从、Patroni 故障切换
- 生产运维:pgBouncer 连接池、postgresql.conf 调优、pg_stat_statements
- 零停机迁移:
CREATE INDEX CONCURRENTLY、大表加列、Migration 版本管理
本书章节
| 章节 | 主题 | 核心问题 |
|---|---|---|
| 第 01 章 | 安装与基础配置 | 怎样快速搭建可用的 PostgreSQL 环境?psql 怎么用? |
| 第 02 章 | Schema 设计 | PostgreSQL 有哪些特有类型?Schema 怎么设计才规范? |
| 第 03 章 | 索引与优化 | 什么时候需要索引?如何用 EXPLAIN ANALYZE 定位慢查询? |
| 第 04 章 | 复杂查询 | CTE 和窗口函数能解决哪些 JOIN 解决不了的问题? |
| 第 05 章 | JSONB | 什么时候用 JSONB?如何高效查询 JSON 数据? |
| 第 06 章 | 事务与并发 | 什么是 MVCC?如何避免死锁?长事务有什么危险? |
| 第 07 章 | 搜索与向量 | 怎样用 PostgreSQL 做全文搜索?pgvector 怎么用? |
| 第 08 章 | 备份与高可用 | pg_dump 和 pg_basebackup 有什么区别?主从怎么配? |
| 第 09 章 | 性能与监控 | pgBouncer 解决什么问题?哪些 postgresql.conf 参数值得调? |
| 第 10 章 | 生产迁移 | 如何不停机地给大表加列或建索引?Migration 最佳实践? |
技术前提
建议掌握的基础:
✅ 基本 SQL(SELECT、INSERT、UPDATE、DELETE、JOIN)
✅ 任意一门编程语言(Python/Node.js/Go 均可)
✅ 基本的命令行操作(SSH、文件权限)
不需要:
❌ 不需要 DBA 专业背景
❌ 不需要了解 MySQL/Oracle 的内部机制
❌ 不需要提前了解 PostgreSQL
PostgreSQL vs MySQL 速查对比
本书全程提供与 MySQL 的对比,方便从 MySQL 迁移的读者快速找到等价概念:
| 功能 | PostgreSQL | MySQL |
|---|---|---|
| 自增主键 | SERIAL / BIGSERIAL / GENERATED ALWAYS AS IDENTITY | AUTO_INCREMENT |
| JSON 支持 | JSONB(二进制存储,可索引) | JSON(文本存储,功能较弱) |
| 全文搜索 | 内置 tsvector / tsquery | 有限的 FULLTEXT INDEX |
| 数组类型 | 原生支持 INTEGER[]、TEXT[] | 不支持(需 JSON 模拟) |
| 事务隔离 | 支持 SERIALIZABLE | 支持但实现有差异 |
| 物化视图 | 支持 MATERIALIZED VIEW | 不支持 |
| 扩展插件 | 丰富(pgvector、pg_jieba、PostGIS...) | 有限 |
相关书系
- 前置推荐:DevOps 实战指南(服务器管理基础)、Python 实战指南(psycopg2/SQLAlchemy 使用)
- 读完本书后:Laravel 实战指南(Eloquent 与数据库迁移)、IaC 实战指南(Terraform 管理云数据库)
- 平行参考:RAG 实战指南(pgvector 在向量检索中的应用)
开始第一章:安装与环境搭建