PostgreSQL 教程
PostgreSQL 是当今功能最完整、扩展性最强的开源关系型数据库。它既有严格的事务与约束保证(ACID、MVCC、可序列化隔离),又能通过扩展系统长出 GIS、时序、向量检索、分布式等几乎任何能力;既支持 JSONB、数组、范围、几何这类「不像关系库」的数据类型,又能用声明式分区、并行查询、逻辑复制支撑起超大规模的场景。对后端工程师来说,它是一个「学一次、用十年」的长期投资。
本教程是一套从零到生产级的 PostgreSQL 18 系统教程,共 18 个阶段、527 个页面,覆盖安装入门、架构原理、数据类型、SQL 语法、高级查询、函数、约束与索引、表设计与分区、事务与并发、存储过程与触发器、配置调优、全文搜索与扩展、备份恢复、高可用与复制、安全与权限、监控运维,以及客户端驱动与实战设计模式。每页都有可执行的示例、注意事项与最佳实践,力求「看完能用、用过能查」。
阅读前提
本教程假设你能读写基础 SQL、了解命令行操作。若完全没有数据库基础,建议先读 1.2 简明教程,再回到本页按路线系统学习。
适合人群
| 读者 | 建议起点 | 关注重点 |
|---|---|---|
| 数据库新人 | 阶段 1 入门指引 | 安装、psql、CRUD、环境搭建 |
| 有 MySQL 经验的后端 | 阶段 1.1 简介 + 阶段 3 数据类型 | 与 MySQL 的差异、数据类型选择、事务行为 |
| 应用开发工程师 | 阶段 4~9 | SQL、索引设计、事务与并发、性能调优 |
| DBA / 运维工程师 | 阶段 12~17 | 配置、备份恢复、高可用、安全、监控 |
| 架构师 / 技术选型 | 阶段 15~18 | 复制拓扑、读写分离、云原生与新版本特性 |
学习路线
教程按「由浅入深、逐层递进」组织,建议按阶段顺序推进;已熟悉基础者可直接跳到关心的阶段。
| 阶段 | 主题 | 页面数 | 核心收获 |
|---|---|---|---|
| 1 | 入门指引 | 32 | 认识 PostgreSQL、安装、服务管理、客户端工具 |
| 2 | 架构与核心概念 | 29 | 进程/内存/存储结构、MVCC、WAL 写入机制 |
| 3 | 数据类型 | 51 | 数值、字符串、时间、JSONB、数组、范围、全文类型 |
| 4 | SQL 基础 | 33 | DDL / DML / DQL、运算符与表达式 |
| 5 | 高级查询 | 38 | 连接、子查询、集合操作、CTE、窗口函数、LATERAL |
| 6 | 函数与操作符 | 45 | 字符串/数值/时间/聚合/JSON 函数、自定义函数 |
| 7 | 约束与索引 | 33 | 主键外键、B-Tree/GIN/GiST/BRIN、索引维护 |
| 8 | 表设计与分区 | 20 | 表设计规范、表继承、声明式分区、表空间 |
| 9 | 事务与并发控制 | 27 | 隔离级别、锁机制、死锁、顾问锁、两阶段提交 |
| 10 | 视图与规则系统 | 12 | 视图、物化视图、规则系统 |
| 11 | 存储过程与触发器 | 30 | PL/pgSQL、控制结构、游标、触发器、事件触发器 |
| 12 | 配置与性能优化 | 33 | 参数配置、内存调优、EXPLAIN、并行查询、VACUUM |
| 13 | 全文搜索与高级特性 | 26 | 全文检索、FDW、扩展系统、大对象、行级安全 |
| 14 | 备份与恢复 | 19 | pg_dump/pg_restore、物理备份、PITR、灾难恢复 |
| 15 | 高可用与复制 | 26 | 流复制、同步复制、逻辑复制、故障转移、连接池 |
| 16 | 安全与权限 | 21 | 角色权限、客户端认证、SSL、审计、数据加密 |
| 17 | 监控与运维 | 25 | 系统视图、日志、慢查询分析、监控工具、日常运维 |
| 18 | 客户端、实战与新特性 | 27 | psql 高级用法、各语言驱动、设计模式、PG16/17/18 特性 |
合计:527 页。
版本速查
本教程以 PostgreSQL 18 为主版本,同时保留对 PG16、PG17 特性的说明(阶段 18 有专门的新特性章节)。生产环境选型参考:
| 版本 | 发布状态 | 建议 |
|---|---|---|
| PG 18 | 最新稳定版(2025-09 发布) | 新项目首选;注意 initdb 默认开启校验和、生成列默认 VIRTUAL |
| PG 17 | 稳定版 | 追求成熟的团队首选;含 VACUUM 内存改进、故障转移复制槽 |
| PG 16 | 稳定版 | 长期维护中的存量系统常见版本 |
| PG 15 及更早 | 依官方支持周期 | 建议规划升级,参见 版本升级流程 |
官方每个大版本支持 5 年。升级前必读对应版本的 release notes 中「Migration to Version N」一节——升级事故几乎都出在不兼容变化上。详细路线见 版本选择建议。
快速开始
已经装好数据库的,可以先跑通下面几条命令感受一下;没装的请先进入 环境搭建。
# 1. 连接数据库(安装后默认库与用户都是 postgres)
psql -U postgres -h localhost-- 2. 创建库与表
CREATE DATABASE demo;
\c demo
CREATE TABLE users (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name text NOT NULL,
email text NOT NULL UNIQUE,
tags text[] DEFAULT '{}',
profile jsonb DEFAULT '{}'::jsonb,
created_at timestamptz NOT NULL DEFAULT now()
);
-- 3. 写入并查询
INSERT INTO users (name, email, tags, profile)
VALUES ('张三', 'zhang@example.com', ARRAY['vip'], '{"city":"Shanghai"}');
SELECT id, name, profile ->> 'city' AS city
FROM users
WHERE tags @> ARRAY['vip']; id | name | city
----+------+----------
1 | 张三 | Shanghai
(1 row)从这几行就能看出 PostgreSQL 的「性格」:IDENTITY 主键、text[] 数组、jsonb 半结构化数据、@> 包含运算符——这些在其他数据库里往往要靠应用层或额外中间件实现的能力,在这里都是原生类型与运算符,且都能建索引。
下一步
建议从 1.1 PostgreSQL 简介 开始,按学习路线逐阶段推进。