PostgreSQL 概述

person 落叶    watch_later 2026-04-17 09:19:55
visibility 1    class PostgreSQL,数据库    bookmark 专栏

一、PostgreSQL 历史与发展

1. 起源:加州大学伯克利的 POSTGRES 项目(1986-1994)

PostgreSQL 的故事始于 1986 年的加州大学伯克利分校。由数据库领域泰斗 Michael Stonebraker 教授领导的团队,在 DARPA(美国国防高级研究计划局)、陆军研究办公室、国家科学基金会等机构的资助下,启动了 POSTGRES 项目。

项目目标是开发一个超越当时传统数据库系统的下一代对象-关系型数据库,主要解决以下问题:

  • 支持复杂的数据类型和对象关系
  • 提供规则系统,实现主动数据库功能
  • 简化存储管理,支持多种存储方式

关键里程碑:

  • 1987年:第一个"演示性"系统投入使用
  • 1989年6月:Version 1 发布给外部用户
  • 1990年6月:Version 2 发布,重新设计了规则系统
  • 1991年:Version 3 发布,增加了多存储管理器支持
  • 1993年:外部用户数量翻倍,项目维护压力增大
  • 1994年:伯克利 POSTGRES 项目在 Version 4.2 后正式终止

2. 转型:Postgres95 时代(1994-1996)

1994年,伯克利的研究生 Andrew Yu 和 Jolly Chen 为 POSTGRES 添加了 SQL 语言解释器,取代了原有的 PostQUEL 查询语言。这个新版本被命名为 Postgres95,并正式以开源形式发布到互联网。

Postgres95 的主要改进:

  • 代码完全采用 ANSI C 重写,代码量缩减 25%
  • 性能相比 POSTGRES 4.2 提升 30-50%
  • 引入 psql 命令行工具(支持 GNU Readline)
  • 移除实例级规则系统,保留重写规则

3. 正名:PostgreSQL 的诞生与成长(1996-至今)

1996年,项目团队意识到 "Postgres95" 这个名称不足以体现其与原始 POSTGRES 项目和 SQL 能力的关联,于是正式更名为 PostgreSQL。版本号从 6.0 开始重新编号,以延续伯克利项目的序列。

版本演进的关键里程碑:

时期 版本 关键特性
奠基期 6.0-7.4 (1996-2003) 外键约束、WAL预写日志、MVCC、模式支持、PL/pgSQL
企业就绪期 8.0-8.4 (2005-2009) 原生Windows支持、表空间、PITR、全文搜索、HOT技术
功能爆发期 9.0-9.6 (2010-2016) 流复制、热备、JSON支持、逻辑复制、BRIN索引
成熟创新期 10-13 (2017-2020) 原生分区表、并行查询、JIT编译、增量排序
现代增强期 14-18 (2021-至今) JSON_TABLE、VACUUM优化、异步I/O、UUIDv7

4. 当今地位

根据 DB-Engines 2025年5月的排名,PostgreSQL 以 674.32分 位列全球数据库第四,月度得分逆势增长 7.07分,是前四名中唯一保持正增长的数据库。开发者社区规模已突破 100万人,全球有超过 50% 的国产数据库基于 PostgreSQL 二次开发。


二、特性与优势

1. 开源与许可优势

PostgreSQL 采用 PostgreSQL 许可证,这是一种类似 BSD/MIT 的宽松开源许可证。这意味着:

  • 完全免费:无需支付任何许可费用,无论是私有使用、商业应用还是学术研究
  • 自由修改:可以任意修改源代码,满足特定业务需求
  • 自由分发:可以将修改后的版本重新分发
  • 无供应商锁定:不被任何单一公司控制,有众多商业支持厂商可供选择

2. ACID 合规性

PostgreSQL 完全符合 ACID 标准,确保事务处理的可靠性:

特性 说明
原子性 事务中的所有操作要么全部成功,要么全部失败
一致性 事务执行前后,数据库从一个有效状态转换到另一个有效状态
隔离性 使用 MVCC 实现,并发事务互不干扰
持久性 通过 WAL 预写日志确保系统故障后数据不丢失

3. 扩展性架构

PostgreSQL 以"可扩展性"著称,允许用户在几乎所有层面进行扩展:

可扩展的组件:

  • 数据类型:支持自定义数据类型
  • 函数与操作符:可添加自定义函数和操作符
  • 聚合函数:可定义自定义聚合
  • 索引方法:支持创建新的索引访问方法(B-Tree、GiST、GIN、BRIN 等)
  • 过程语言:支持 PL/pgSQL、PL/Python、PL/Perl、PL/Java 等多种语言

扩展生态系统:

  • PostGIS:地理空间数据处理,全球最强大的开源 GIS 数据库扩展
  • pgvector:向量相似度搜索,支持 AI 语义搜索
  • pg_stat_statements:查询性能监控
  • uuid-ossp:UUID 生成
  • pgcrypto:加密函数
  • 全文搜索:内置的全文检索引擎

4. 高级数据类型支持

PostgreSQL 支持远超传统关系型数据库的丰富数据类型:

基础类型:

  • 数值类型(整数、浮点数、精确数值 NUMERIC)
  • 字符类型(CHAR、VARCHAR、TEXT)
  • 日期时间类型(DATE、TIME、TIMESTAMP、INTERVAL)
  • 布尔类型、二进制类型 BYTEA

高级类型:

  • JSON/JSONB:原生 JSON 支持,JSONB 支持高效索引和查询
  • 数组:支持一维和多维数组
  • 范围类型:int4range、daterange、tsrange 等
  • 几何类型:POINT、LINE、POLYGON、CIRCLE 等
  • 网络地址类型:INET、CIDR、MACADDR
  • 复合类型:类似结构体的自定义类型
  • XML:原生 XML 支持

5. 并发控制:MVCC

PostgreSQL 通过 多版本并发控制(MVCC) 实现高效的并发处理:

MVCC 的核心机制:

  • 写操作不阻塞读操作,读操作也不阻塞写操作
  • 每个事务看到的是数据的一个快照(Snapshot)
  • 更新操作创建新的数据版本,而非覆盖原有数据
  • 旧版本数据由 VACUUM 机制定期清理

优势:

  • 高并发场景下性能优异
  • 避免读锁和写锁的冲突
  • 支持完整的 ACID 隔离级别

6. 数据可靠性与高可用

WAL 预写日志:

  • 所有修改先写入 WAL 日志,再写入数据文件
  • 崩溃恢复时可以重放日志,确保数据不丢失

复制与高可用:

  • 流复制:主从异步/同步复制
  • 逻辑复制:表级粒度的复制
  • 级联复制:从节点可向下传递数据
  • PITR:时间点恢复功能

备份能力:

  • 物理备份(pg_basebackup)
  • 逻辑备份(pg_dump/pg_dumpall)
  • 支持在线热备

7. SQL 标准兼容性

PostgreSQL 拥有业界最高的 SQL 标准符合度之一:

支持的 SQL 特性:

  • 完整的 SQL:2016 核心特性
  • 复杂查询(子查询、CTE、递归查询)
  • 窗口函数
  • 外键约束、检查约束、唯一约束
  • 视图与物化视图
  • 触发器和存储过程
  • 事务和保存点

三、与其他数据库的对比

1. PostgreSQL vs MySQL

对比维度 PostgreSQL MySQL
开源协议 PostgreSQL 许可证(BSD 风格),完全自由 GPL + 商业许可证,Oracle 拥有商业版本
ACID 合规 完全符合 ACID 仅 InnoDB/NDB 存储引擎符合
SQL 标准兼容 几乎完全符合 SQL 标准 部分兼容
并发控制 MVCC,读写互不阻塞 InnoDB 使用行锁和 MVCC
数据类型 丰富(JSONB、数组、几何、范围等) 基础类型为主
扩展性 高度可扩展(自定义类型、函数、索引) 扩展能力有限
存储引擎 单一存储架构 多存储引擎(InnoDB、MyISAM 等)
性能特点 复杂查询、分析场景优秀 简单读写、高并发场景优秀
复制 物理复制 + 逻辑复制 主从复制为主
适用场景 复杂业务、数据分析、地理信息 Web 应用、互联网公司、快速原型

2. PostgreSQL vs Oracle

对比维度 PostgreSQL Oracle
成本 免费开源 商业软件,高昂许可费用
供应商锁定 无锁定,可自由选择服务商 强供应商锁定
性能 优秀,适合大多数场景 极高,针对企业级负载优化
安全性 高级安全功能(RLS、SSL) 业界顶级安全方案
高可用 流复制、Patroni、Pgpool Data Guard、RAC
可扩展性 水平扩展(Citus)、垂直扩展 垂直扩展为主
企业功能 功能完善,多数场景足够 极丰富的企业级功能集
市场份额 快速增长 稳居第一但增长乏力
适用场景 Oracle 替代首选、金融、政府 大型企业、关键任务系统

3. PostgreSQL vs SQL Server

对比维度 PostgreSQL SQL Server
平台 全平台支持(Linux、Windows、macOS) 主要优化 Windows 生态
成本 免费开源 需授权费用
生态集成 开放生态 与微软产品深度集成(Power BI、Azure)
数据分析 功能完善,可扩展 内置强大 BI 功能
开源社区 全球社区,活跃度高 微软主导
云策略 多云友好 主打 Azure
适用场景 开放技术栈、多云部署 Windows 技术栈、微软生态企业

4. 对比总结表

特性 PostgreSQL MySQL Oracle SQL Server
开源 ✅ 完全开源 ⚠️ 开源+商业 ❌ 商业 ❌ 商业
ACID 合规 ✅ 完全 ⚠️ 部分引擎 ✅ 完全 ✅ 完全
SQL 标准 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐
扩展性 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐
数据类型 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐
成本 免费 免费/付费 极高
学习曲线 中陡 平缓 陡峭
社区/生态 活跃开源 非常活跃 企业支持 企业支持
性能-简单查询 ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐
性能-复杂查询 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐
高并发 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐

四、适用场景

1. 理想使用场景

  • 复杂业务系统:ERP、CRM、金融交易系统
  • 数据分析与报表:OLAP、数据仓库、商业智能
  • 地理信息系统(GIS):结合 PostGIS 扩展
  • 移动应用和 Web 应用:需要 JSON 支持和高并发
  • Oracle 替代项目:从商业数据库迁移
  • 需要数据完整性的系统:银行、医疗、保险
  • 多语言开发环境:支持主流编程语言

2. 相对较弱的场景

  • ⚠️ 极简单的键值存储:Redis 或 Memcached 更合适
  • ⚠️ 纯只读的极简单查询:MySQL 可能更轻量
  • ⚠️ 已有深度 Oracle/SQL Server 技术栈的企业:迁移成本较高

五、市场趋势

PostgreSQL 是目前增长最快的数据库之一,主要驱动力包括:

  1. Oracle 替代趋势:企业为降低成本,从 Oracle 迁移到 PostgreSQL
  2. 云原生发展:AWS RDS、Google Cloud SQL、Azure Database 等云服务广泛支持
  3. AI 与 JSON 需求:pgvector 支持向量搜索,JSONB 支持半结构化数据
  4. 国产数据库基础:半数国产数据库基于 PostgreSQL 开发
  5. 活跃的社区:全球超过 100 万开发者,持续贡献新特性
评论区
评论列表
menu