Skip to content

PostgreSQL 教程 ​

PostgreSQL 是当今功能最完整、扩展性最强的开源关系型数据库。它既有严格的事务与约束保证(ACID、MVCC、可序列化隔离),又能通过扩展系统长出 GIS、时序、向量检索、分布式等几乎任何能力;既支持 JSONB、数组、范围、几何这类「不像关系库」的数据类型,又能用声明式分区、并行查询、逻辑复制支撑起超大规模的场景。对后端工程师来说,它是一个「学一次、用十年」的长期投资。

本教程是一套从零到生产级的 PostgreSQL 18 系统教程,共 18 个阶段、527 个页面,覆盖安装入门、架构原理、数据类型、SQL 语法、高级查询、函数、约束与索引、表设计与分区、事务与并发、存储过程与触发器、配置调优、全文搜索与扩展、备份恢复、高可用与复制、安全与权限、监控运维,以及客户端驱动与实战设计模式。每页都有可执行的示例、注意事项与最佳实践,力求「看完能用、用过能查」。

阅读前提

本教程假设你能读写基础 SQL、了解命令行操作。若完全没有数据库基础,建议先读 1.2 简明教程,再回到本页按路线系统学习。

适合人群 ​

读者建议起点关注重点
数据库新人阶段 1 入门指引安装、psql、CRUD、环境搭建
有 MySQL 经验的后端阶段 1.1 简介 + 阶段 3 数据类型与 MySQL 的差异、数据类型选择、事务行为
应用开发工程师阶段 4~9SQL、索引设计、事务与并发、性能调优
DBA / 运维工程师阶段 12~17配置、备份恢复、高可用、安全、监控
架构师 / 技术选型阶段 15~18复制拓扑、读写分离、云原生与新版本特性

学习路线 ​

教程按「由浅入深、逐层递进」组织,建议按阶段顺序推进;已熟悉基础者可直接跳到关心的阶段。

阶段主题页面数核心收获
1入门指引32认识 PostgreSQL、安装、服务管理、客户端工具
2架构与核心概念29进程/内存/存储结构、MVCC、WAL 写入机制
3数据类型51数值、字符串、时间、JSONB、数组、范围、全文类型
4SQL 基础33DDL / DML / DQL、运算符与表达式
5高级查询38连接、子查询、集合操作、CTE、窗口函数、LATERAL
6函数与操作符45字符串/数值/时间/聚合/JSON 函数、自定义函数
7约束与索引33主键外键、B-Tree/GIN/GiST/BRIN、索引维护
8表设计与分区20表设计规范、表继承、声明式分区、表空间
9事务与并发控制27隔离级别、锁机制、死锁、顾问锁、两阶段提交
10视图与规则系统12视图、物化视图、规则系统
11存储过程与触发器30PL/pgSQL、控制结构、游标、触发器、事件触发器
12配置与性能优化33参数配置、内存调优、EXPLAIN、并行查询、VACUUM
13全文搜索与高级特性26全文检索、FDW、扩展系统、大对象、行级安全
14备份与恢复19pg_dump/pg_restore、物理备份、PITR、灾难恢复
15高可用与复制26流复制、同步复制、逻辑复制、故障转移、连接池
16安全与权限21角色权限、客户端认证、SSL、审计、数据加密
17监控与运维25系统视图、日志、慢查询分析、监控工具、日常运维
18客户端、实战与新特性27psql 高级用法、各语言驱动、设计模式、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」一节——升级事故几乎都出在不兼容变化上。详细路线见 版本选择建议。

快速开始 ​

已经装好数据库的,可以先跑通下面几条命令感受一下;没装的请先进入 环境搭建。

bash
# 1. 连接数据库(安装后默认库与用户都是 postgres)
psql -U postgres -h localhost
sql
-- 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'];
text
 id | name |   city
----+------+----------
  1 | 张三 | Shanghai
(1 row)

从这几行就能看出 PostgreSQL 的「性格」:IDENTITY 主键、text[] 数组、jsonb 半结构化数据、@> 包含运算符——这些在其他数据库里往往要靠应用层或额外中间件实现的能力,在这里都是原生类型与运算符,且都能建索引。

下一步

建议从 1.1 PostgreSQL 简介 开始,按学习路线逐阶段推进。

参考链接 ​