强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

PostgreSQL 完全指南 / 01 - 简介:PostgreSQL 的前世今生

第 01 章 · PostgreSQL 简介

1.1 历史沿革

PostgreSQL 的历史可追溯至 1973 年加州大学伯克利分校(UC Berkeley)的 Ingres 项目,由 Michael Stonebraker 教授领导。

1973 ── Ingres 项目启动(UC Berkeley)
  │
1982 ── 商业化:Ingres Corporation
  │
1986 ── POSTGRES 项目启动(Stonebraker 回归学术界)
  │
1995 ── Postgres95 — 添加 SQL 支持
  │
1996 ── PostgreSQL 6.0 — 开源并更名为 PostgreSQL
  │
2000 ── 7.0 — 外键、JOIN 改进
  │
2005 ── 8.0 — Windows 原生支持、Savepoints、Point-in-Time Recovery
  │
2010 ── 9.0 — 流复制、Hot Standby
  │
2014 ── 9.4 — JSONB 类型、逻辑复制
  │
2017 ── 10 ── 逻辑复制内置、分区表声明式语法
  │
2021 ── 14 ── 多范围类型、压缩 TOAST
  │
2023 ── 16 ── MERGE 命令、逻辑复制增强
  │
2024 ── 17 ── 增量备份、JSON_TABLE、SQL/JSON 改进
  │
2025 ── 18(开发中)— 持续创新中

📌 为什么叫 PostgreSQL 而不是 Postgres? 因为它继承自 POSTGRES 项目,又增加了 SQL 支持,所以合称 PostgreSQL。但社区中很多人仍亲切地叫它 “Postgres”。


1.2 核心特性一览

特性类别 具体特性 说明
数据完整性 ACID 事务 完整的事务支持
数据类型 丰富类型系统 JSON/JSONB、数组、Range、几何、网络地址、全文搜索等
索引 多种索引类型 B-Tree、Hash、GiST、GIN、BRIN、Bloom
并发控制 MVCC 多版本并发控制,读写互不阻塞
复制 流复制 + 逻辑复制 物理级和逻辑级的高可用方案
扩展性 扩展体系 400+ 官方及社区扩展
安全性 行级安全策略(RLS) 精细的访问控制
过程语言 PL/pgSQL、PL/Python 等 支持多种语言编写存储过程
全文搜索 tsvector / tsquery 内建全文搜索引擎
分区 声明式分区表 Range / List / Hash 分区
JSON 原生 JSON/JSONB 可作为文档数据库使用

1.3 PostgreSQL vs MySQL

这是最常被问到的问题。以下是客观对比:

维度 PostgreSQL MySQL (InnoDB)
许可证 PostgreSQL License(类 MIT) GPL v2 / 商业许可(Oracle)
SQL 标准合规 ⭐⭐⭐⭐⭐ 高度合规 ⭐⭐⭐ 部分合规
JSON 支持 JSONB 索引强大,可当文档库 JSON 类型支持有限
全文搜索 内建 tsvector/tsquery 需要 FULLTEXT 索引(功能较弱)
地理数据 PostGIS 扩展(行业标准) 空间扩展(功能较少)
并发模型 MVCC,读写互不阻塞 InnoDB MVCC,但部分场景仍有锁争用
复制 流复制 + 逻辑复制 主从复制、Group Replication
扩展性 扩展机制极其强大(类型、索引、函数均可扩展) 扩展机制有限
默认端口 5432 3306
典型用户 Apple、Spotify、Instagram、Reddit Facebook、GitHub、WordPress
适用场景 复杂查询、GIS、JSON 文档、OLAP 简单 CRUD、Web 应用、读密集场景

选型建议

需要复杂查询/分析? ──→ PostgreSQL
需要 GIS 地理数据? ──→ PostgreSQL + PostGIS
需要 JSON 文档存储? ──→ PostgreSQL (JSONB)
需要简单 Web 后端? ──→ MySQL 或 PostgreSQL 都可以
需要最高生态兼容?  ──→ MySQL(CMS 生态更成熟)

💡 技巧:近年来 PostgreSQL 在各领域的采用率持续增长。如果你不确定选哪个,选 PostgreSQL 通常不会错——它的功能是 MySQL 的超集。


1.4 适用场景

✅ 非常适合的场景

场景 为什么选 PG
企业级 OLTP 事务可靠性强,ACID 完整
地理信息系统(GIS) PostGIS 是行业标准
JSON 文档存储 JSONB 类型 + GIN 索引,媲美 MongoDB
时序数据 TimescaleDB 基于 PG,性能优异
全文搜索 内建 tsvector,pg_trgm 模糊搜索
数据仓库/OLAP 窗口函数、CTE、并行查询
多租户 SaaS RLS + Schema 隔离
科学计算 数组类型 + PL/Python + 扩展生态

⚠️ 不太适合的场景

场景 原因 替代方案
超高写入吞吐(百万 TPS) MVCC 开销较大 ScyllaDB、TiKV
纯键值存储 过于重量级 Redis、etcd
图数据库 非原生图模型 Neo4j、Apache AGE(PG 扩展)
嵌入式数据库 资源占用较高 SQLite

1.5 版本选择建议

截至 2026 年,PostgreSQL 各版本的支持状态如下:

版本系列 发布时间 EOL(预计) 状态 建议
PG 14 2021-09 2026-11 安全维护期 计划升级
PG 15 2022-10 2027-11 安全维护期 可用
PG 16 2023-09 2028-11 活跃维护 ✅ 推荐
PG 17 2024-09 2029-11 活跃维护 ✅ 推荐(最新稳定版)
PG 18 开发中 开发版 不用于生产

⚠️ 注意事项

  • PostgreSQL 每年发布一个大版本,每年 9 月/10 月发布
  • 每个大版本维护 5 年
  • 升级大版本需要 pg_upgrade 或逻辑迁移
  • 生产环境建议选择最新的稳定版本

1.6 社区与生态

核心资源

资源 地址
官方文档 https://www.postgresql.org/docs/
Wiki https://wiki.postgresql.org/
邮件列表 pgsql-general / pgsql-novice
GitHub Mirror https://github.com/postgres/postgres
PG Extensions https://pgxn.org/
PGXN(扩展网络) https://pgxn.org/

知名发行版

发行版 说明
官方原版 postgresql.org 下载
Citus 分布式 PG(微软)
Greenplum MPP 数据仓库(基于 PG)
TimescaleDB 时序数据库扩展
Supabase 开源 Firebase 替代(基于 PG)
Neon Serverless PostgreSQL
YugabyteDB 分布式 SQL(PG 兼容)

1.7 快速体验

如果你想现在就试一试,最快的方式是用 Docker:

# 拉取并启动 PostgreSQL 17
docker run -d \
  --name pg-demo \
  -e POSTGRES_PASSWORD=mypassword \
  -p 5432:5432 \
  postgres:17

# 连接数据库
docker exec -it pg-demo psql -U postgres

# 在 psql 中执行
SELECT version();
SELECT current_database();
SELECT now();

输出示例:

                                                     version
-------------------------------------------------------------------------------------------------------------
 PostgreSQL 17.x on x86_64-pc-linux-gnu, compiled by gcc (GCC) x.x.x, 64-bit
(1 row)

业务场景

场景 PG 如何发挥作用
电商系统 订单事务(ACID)+ 商品搜索(全文索引)+ 地址解析(PostGIS)
社交平台 用户关系 + JSONB 存储动态内容 + 推送通知(LISTEN/NOTIFY)
数据分析平台 窗口函数 + CTE + 并行查询 + 分区表
IoT 平台 时序数据(TimescaleDB)+ JSONB 存储设备元数据
SaaS 多租户 Schema 级隔离 + RLS 行级安全

扩展阅读