强曰为道

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

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

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

维度PostgreSQLMySQL (InnoDB)
许可证PostgreSQL License(类 MIT)GPL v2 / 商业许可(Oracle)
SQL 标准合规⭐⭐⭐⭐⭐ 高度合规⭐⭐⭐ 部分合规
JSON 支持JSONB 索引强大,可当文档库JSON 类型支持有限
全文搜索内建 tsvector/tsquery需要 FULLTEXT 索引(功能较弱)
地理数据PostGIS 扩展(行业标准)空间扩展(功能较少)
并发模型MVCC,读写互不阻塞InnoDB MVCC,但部分场景仍有锁争用
复制流复制 + 逻辑复制主从复制、Group Replication
扩展性扩展机制极其强大(类型、索引、函数均可扩展)扩展机制有限
默认端口54323306
典型用户Apple、Spotify、Instagram、RedditFacebook、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、并行查询
多租户 SaaSRLS + Schema 隔离
科学计算数组类型 + PL/Python + 扩展生态

⚠️ 不太适合的场景

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

1.5 版本选择建议

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

版本系列发布时间EOL(预计)状态建议
PG 142021-092026-11安全维护期计划升级
PG 152022-102027-11安全维护期可用
PG 162023-092028-11活跃维护✅ 推荐
PG 172024-092029-11活跃维护✅ 推荐(最新稳定版)
PG 18开发中开发版不用于生产

⚠️ 注意事项

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

1.6 社区与生态

核心资源

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

知名发行版

发行版说明
官方原版postgresql.org 下载
Citus分布式 PG(微软)
GreenplumMPP 数据仓库(基于 PG)
TimescaleDB时序数据库扩展
Supabase开源 Firebase 替代(基于 PG)
NeonServerless 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 行级安全

扩展阅读