下一篇【第02篇】为什么选择PostgreSQL?——七大核心优势全面解读


想入门 PostgreSQL 却不知道它的来头?本文带你完整回顾 PostgreSQL 从伯克利实验室到全球最先进开源数据库的演进历程,帮你建立对这款数据库的整体认知。


写在前面

如果你是刚接触 PostgreSQL(以下简称 PG)的新手,可能会有个疑问:PostgreSQL 到底有什么特别的?为什么要花时间学它?

要回答这个问题,最好的方式就是了解它的历史。一款数据库能活 30 多年并且越来越强大,背后一定有它的道理。读完这篇文章,你会对 PG 有一个全景式的认知,也能理解为什么越来越多公司在从 Oracle/MySQL 迁移到 PG。


一、一切从伯克利开始

1. 1977年:Ingres 的诞生

故事要追溯到 1977年,加州大学伯克利分校(UC Berkeley)。

当时,著名的数据库科学家 Michael Stonebraker 教授启动了 Ingres 项目(Interactive Graphics and Retrieval System)。这是 PG 的"祖父"。Ingres 是一个非关系型数据库,但它在关系数据库理论方面做出了很多开创性贡献。

1982年,Stonebraker 离开伯克利,把 Ingres 商业化,成立了 Relational Technologies 公司。后来这家公司被 Computer Associates(CA) 收购,Ingres 作为商业产品一直存活至今。

💡 小知识:Ingres 的名字里"Inter"代表交互式,它是最早支持 SQL 的数据库原型之一。


2. 1985年:Postgres 项目启动

1980年代,数据库领域面临一个核心问题:如何维护数据之间的关系

1985年,Stonebraker 教授回到伯克利,启动了一个名为 “post-Ingres” 的项目——这就是 Postgres 的开端。这个项目由 DARPA、ARO、NSF 等多家机构联合赞助,目标是解决 Ingres 中数据关系维护的痛点。

关键时间节点:

年份 事件
1986 Stonebraker 发表系列论文,阐述新数据库架构设计
1987 第一个"演示性"系统可用
1988 在 ACM SIGMOD 会议上公开展示
1989 6月发布 Postgres v1,供外部用户使用

Postgres 项目的核心创新在于:将复杂对象关系和规则系统集成到数据库内核中,这让它在学术和科研领域获得了极高的声誉。

但由于源码维护负担越来越重,伯克利的 Postgres 项目在发布的 v4.2 之后正式终止。


3. 1994年:Postgres95 —— 拥抱 SQL

1994年,来自中国香港的两名伯克利研究生 Andrew YuJolly Chen 向 Postgres 中增加了 SQL 语言解释器,并将项目改名为 Postgres95

这是 PG 历史上的第一个重要转折点:从复杂的学术型查询语言,转向工业标准的 SQL

随后,他们将源码发布到互联网上,Postgres95 正式成为一个开源项目,伯克利 Postgres 代码的继承者。


4. 1996年:PostgreSQL 这个名字诞生了

到了1996年,“Postgres95” 这个名字已经"经不起时间考验"。社区决定起一个更有意义的名字:

PostgreSQL = Postgres + SQL

意思是"增加了 SQL 功能的 Postgres"。版本号也从 6.0 重新开始,延续伯克利 Postgres 项目的版本顺序。

PostgreSQL 这个名字,从此定了下来。


二、版本演进:PG 如何一步步成为"最先进的开源数据库"

下面我们按大版本,梳理 PG 每个阶段的核心突破。


PostgreSQL 6.x —— 重生之作

1996年发布,重新统一版本号,奠定了 PG 作为开源关系型数据库的地位。这一时期 PG 开始建立自己的社区和生态。


PostgreSQL 7.1 —— 预写式日志的引入(2001年)

7.1 版本是 PG 历史上最重要的版本之一

它引入了 WAL(Write-Ahead Logging,预写式日志) 机制。这让 PG 拥有了完善的日志系统,带来了两个巨大好处:

  1. 更好的性能:WAL 机制大幅减少了随机 I/O
  2. 灾难恢复能力:支持联机热备份、宕机后自动恢复

同时,7.1 版本不再限制文本类型的数据段长度,很大程度上解决了 PG 大对象(Large Object)的问题。


PostgreSQL 8.x —— 跨平台与事务增强(2005年)

8.x 系列是 PG 走向企业生产环境的关键版本,核心亮点:

  • Windows 原生支持:PG 终于可以在 Windows 上直接运行,不再依赖 Cygwin
  • 事务保存点(Savepoint):支持部分回滚,大幅增强了事务灵活性
  • 表空间(Tablespace):可以将表存储在不同物理磁盘,方便性能调优
  • PITR(Point-In-Time Recovery,即时恢复):可以恢复到任意时间点
  • PL/Perl 服务端编程语言:扩展存储过程的能力

PostgreSQL 9.x —— 黄金时代(2010-2016年)

9.x 系列标志着 PG 进入了黄金发展阶段。几乎每个子版本都带来了改变游戏规则的功能。

9.0(2010年9月)—— 流复制与 Hot Standby
  • 流复制(Streaming Replication):从此可以非常方便地搭建主从数据库
  • Hot Standby:备库在应用 WAL 日志的同时,可以提供只读查询
  • pg_upgrade:大版本命令行升级工具,升级不再需要 dump/restore
9.1(2011年9月)—— 同步复制与 FDW 框架
  • 同步复制(Synchronous Replication):零数据丢失的高可用方案成为可能
  • 外部表支持(FDW 框架):可以查询其他数据库中的数据
  • CREATE EXTENSION:更方便地安装扩展模块
  • WITH 子查询(CTE):在 INSERT/UPDATE/DELETE 中可以使用子查询,解决了原先无法实现 Oracle 中 MERGE INTO 的问题
  • UNLOGGED 表:不写 WAL 日志的表,某些场景下性能大幅提升
9.2(2012年9月)—— 级联复制与 JSON 类型
  • 级联复制:备库可以再级联挂备库,架构更灵活
  • 备库全量备份:可以从备库做全量备份,减轻主库压力
  • 索引覆盖扫描(Index-Only Scan):类似 Oracle 的覆盖索引,查询只需要访问索引,不必回表
  • JSON 数据类型:向 SQL/NoSQL 混合型数据库迈出了关键一步
9.3(2013年9月)—— 物化视图与事件触发器
  • 物化视图(Materialized View):预计算查询结果,大幅提升复杂查询性能
  • JSON 函数增强:为 JSON 类型增加了更多处理函数和操作符
  • 可更新外部表:通过 FDW 不仅可以查,还可以增删改外部表
  • postgres_fdw:通过此外部表模块可以直接访问其他 PG 服务器上的表
  • 事件触发器(Event Trigger):类似 Oracle 的系统级触发器,增强了数据库审计能力
9.4(2014年12月)—— JSONB 登场
  • JSONB 数据类型:Binary JSON,性能远超普通 JSON 类型
  • 物化视图刷新不再阻塞读:REFRESH MATERIALIZED VIEW CONCURRENTLY
  • WAL 中增加逻辑解码基础:为后续版本的逻辑复制打下基础
  • ALTER SYSTEM 命令:类似 Oracle 的 ALTER SYSTEM,方便修改数据库配置参数
9.5(2016年1月)—— BRIN 索引与行级安全
  • BRIN 索引(Block Range Index):占用极小空间的索引,适合超大型表,类似 Oracle Exadata 中的存储索引
  • 行级安全(Row Level Security):可以控制一个用户只能看见或操作一张表的部分行
  • 多 CPU 性能提升:更好地利用多核 CPU 的并行能力
9.6(2016年9月)—— 并行查询元年
  • 并行查询(Parallel Query):全表扫描、JOIN、聚合操作可以利用多 CPU 并行计算
  • 多个同步 Standby:不再只允许一个同步备库,可以实现完全同步模式

PostgreSQL 10.x —— 逻辑复制与分区表(2017年)

10.x 是 PG 走向分布式和大规模应用的关键版本:

  • 发布/订阅方式的逻辑复制:高效灵活的复制功能,以前需要第三方软件才能实现
  • Hash 索引支持流复制:不再有 Hash 索引不能复制的限制
  • 并行性能大幅提升:支持并行 B-Tree 扫描、并行 Hash JOIN、并行 CREATE TABLE AS 等
  • 多列统计信息:让多列查询的执行计划更准确
  • 原生分区表:直接通过 CREATE TABLE 语句创建分区表,不再需要用继承语法
  • 连接串高可用支持:连接串中支持写多个数据库服务器地址,并可探测后端是主库还是只读备库

PostgreSQL 11.x —— JIT 与存储过程增强(2018年)

  • JIT(Just-In-Time)编译:SQL 中的表达式执行效率大幅提高
  • 并行创建索引:CREATE INDEX 现在可以并行执行
  • 并行 Hash JOIN:Hash JOIN 现在可以并行执行
  • 存储过程支持嵌入式事务:加强了存储过程的能力
  • 哈希分区表:分区表支持 Hash 分区
  • 分区表增强:支持分区键的更新、主键/外键/索引的完善支持

PostgreSQL 12.x —— 分区性能与索引优化(2019年)

  • 分区表性能大幅提升:往分区表插入和复制数据的性能显著改善,多分区表的查询性能也大幅优化
  • B-Tree 索引优化:索引空间占用减少、性能提升
  • SQL/JSON Path 语言支持:更方便地检索 JSON 数据

三、为什么 PostgreSQL 能成为全球最先进的开源数据库?

了解了历史,我们来看 PG 的核心竞争力。根据《PostgreSQL修炼之道》的总结,PG 有以下七大优势

1. 功能最强大的开源数据库

PG 是最接近工业标准 SQL:2011 的开源数据库。在 SQL:2011 标准要求的 179 项主要功能中,PG 实现了 160 项。目前没有任何一款数据库管理系统能完全实现 SQL:2011 标准中的所有功能。

相比之下,MySQL 对 SQL 标准的支持要弱得多。

2. 稳定可靠,数据零丢失

PG 是唯一能做到数据零丢失的开源数据库

这得益于其成熟的 WAL 机制和成熟的复制架构。目前有报道称,国内外已有部分银行在使用 PostgreSQL 作为生产数据库。

🏦 真实案例:日本最大的电信运营商 NTT 大量使用 PG 替代 Oracle;法国的政府机构正积极推动采用 PG 取代商业数据库。

3. 开源省钱,协议友好

PG 使用的是 类 BSD 协议(PostgreSQL License),在使用和二次开发上基本没有限制

  • ✅ 可以免费用于任何场景(包括商业产品)
  • ✅ 可以修改源码并闭源发布
  • ✅ 没有 MySQL 曾经的 GPL 协议"传染性"问题

4. 支持广泛的开发语言

PG 支持大量的主流开发语言,包括:

C · C++ · Perl · Python · Java · Tcl · PHP · Ruby · Go · Rust

不仅如此,PG 的服务端存储过程也支持多种语言(PL/pgSQL、PL/Python、PL/Perl、PL/Tcl 等),让数据库端的业务逻辑编写变得非常灵活。

5. 社区活跃,响应迅速

PG 社区基本上每 3 个月推出一个补丁版本。这意味着:

  • 已知 Bug 很快会被修复
  • 新的应用场景需求会及时得到响应
  • 大版本每年发布一个,持续演进

6. 丰富的数据类型支持

PG 支持的数据类型是主流数据库中最丰富的

类型类别 具体类型
基础类型 INTEGER、BIGINT、NUMERIC、SERIAL、UUID
文本类型 VARCHAR、TEXT、JSON、JSONB
时间类型 DATE、TIME、TIMESTAMP、INTERVAL
网络类型 INET、CIDR、MACADDR
几何类型 POINT、LINE、CIRCLE、POLYGON
全文检索 TSVECTOR、TSQUERY
其他 数组、HStore(Key-Value)、XML、范围类型

7. 强大的扩展生态

PG 有非常成熟的扩展(Extension)机制

  • PostGIS:最著名的开源 GIS 系统,让 PG 可以处理地理空间数据
  • ** TimescaleDB**:时序数据库插件,适合 IoT 和监控场景
  • Citus:分布式分库分表插件(已被微软收购)
  • pg_stat_statements:SQL 性能分析利器
  • zhparser:中文全文检索插件

四、PostgreSQL 的应用现状与发展趋势

国外应用现状

PG 在国外的应用已经非常广泛:

  • NTT(日本电报电话公司):大量使用 PG 替代 Oracle,并在 PG 之上二次开发了 Postgres-XC(share-nothing 架构的数据库集群)
  • Skype(网络电话公司):大量使用 PG,并贡献了 PL/Proxy(数据水平拆分软件)、pgQ(消息队列)、Londiste(逻辑同步软件)
  • Salesforce:全球最大的 CRM 软件服务商,开始使用 PG,并招募了 PG 内核开发者 Tom Lane
  • Instagram:著名的图片分享网站,使用 Python + PostgreSQL 架构,十几个人就支撑了整个公司的业务
  • 美国联邦机构:2012 年起全面转向 PG 阵营
  • 法国政府:积极推动政府机构采用 PG 取代商业数据库

国内应用现状

在国内,越来越多的公司开始使用 PG:

  • 亚信科技(AsiaInfo):在 Postgres-XC 基础上开发了 AntDB,面向金融、电信、政务等行业的分布式事务型关系数据库
  • 腾讯:在 Postgres-XC 基础上开发了 TBase 分布式数据库,创造性地引入 GROUP 概念,提出双 Key 分布策略,有效解决了数据倾斜问题
  • 斯凯网络:后台数据库基本都是 PG
  • 去哪儿网(qunar.com):大量使用 PG
  • 平安科技:大量使用 PG

云服务商的支持

主流云服务商都提供了 PG 的云数据库服务:

  • 亚马逊 RDS for PostgreSQL
  • 阿里云 RDS for PostgreSQL
  • 腾讯云 TDSQL for PostgreSQL
  • 华为云 RDS for PostgreSQL

五、PostgreSQL vs MySQL vs Oracle —— 如何选择?

很多人在选择数据库时会纠结:到底用 MySQL 还是 PostgreSQL?用 PostgreSQL 还是 Oracle?

PostgreSQL vs MySQL

对比维度 PostgreSQL MySQL
SQL 标准兼容性 ⭐⭐⭐⭐⭐ 非常强 ⭐⭐⭐ 一般(8.0 开始支持 Hash JOIN 但仍不完善)
复杂查询能力 ⭐⭐⭐⭐⭐ 支持 Nest Loop/Hash JOIN/Sort Merge JOIN ⭐⭐ 之前只支持 Nest Loop
数据分析能力 ⭐⭐⭐⭐⭐ 非常适合数据仓库 ⭐⭐ 不适合做数据仓库
扩展能力 ⭐⭐⭐⭐⭐ 丰富的 Extension 机制 ⭐⭐ UDF 扩展能力有限
高可用方案 ⭐⭐⭐⭐⭐ 同步复制、逻辑复制、流复制 ⭐⭐⭐ 异步/半同步复制,零丢失方案复杂
在线 DDL ⭐⭐⭐⭐⭐ 加列瞬间完成,支持在线建索引 ⭐⭐ 很多 DDL 需要重建表、锁表
性能监控 ⭐⭐⭐⭐⭐ 大量性能视图 ⭐⭐⭐ 性能视图较少
适合场景 复杂业务、数据仓库、GIS、高可用要求高 简单 KV 存储、读多写少、博客类应用

选型建议

  • 如果你的应用不像博客系统那么简单,又不想消耗太多开发资源,PG 是非常明智的选择
  • 如果你仅仅是想把数据库作为一个简单的存储软件,一些较复杂的功能都想放在应用中来实现,那么选择 MySQL 也是合适的

PostgreSQL vs Oracle

对比维度 PostgreSQL Oracle
功能丰富度 ⭐⭐⭐⭐⭐ 非常接近 Oracle ⭐⭐⭐⭐⭐ 功能最强大的商业数据库
集群能力 ⭐⭐⭐ 需要第三方方案(如 Citus) ⭐⭐⭐⭐⭐ RAC 非常成熟
高可用方案 ⭐⭐⭐⭐⭐ 流复制、逻辑复制配置简单 ⭐⭐⭐⭐⭐ Data Guard 非常成熟
互联网特性 ⭐⭐⭐⭐⭐ JSON、数组、网络类型、正则表达式 ⭐⭐⭐ 较弱
安装包大小 ⭐⭐⭐⭐⭐ 几十 MB ⭐ 几个 GB 以上
安装时间 ⭐⭐⭐⭐⭐ 分钟级 ⭐⭐ 小时级
最小运行内存 ⭐⭐⭐⭐⭐ 512MB 云主机可运行 ⭐⭐ 需要数 GB 内存
费用 ⭐⭐⭐⭐⭐ 免费 ⭐ 非常昂贵

选型建议

  • 如果你需要 Oracle 的功能,但预算有限,PG 是最接近 Oracle 的开源替代方案
  • 如果你需要极致的性能调优和完整的企业级支持,且预算充足,Oracle 仍有优势
  • PG 在互联网特征功能(JSON、数组、网络类型等)上比 Oracle 更强

六、总结与下篇预告

本文要点回顾

  1. PG 起源于 1977 年伯克利的 Ingres 项目,由数据库泰斗 Michael Stonebraker 发起
  2. 1996 年正式定名为 PostgreSQL,取 “Postgres + SQL” 之意
  3. 9.x 系列是 PG 的黄金时代,流复制、同步复制、并行查询、JSONB 等重磅功能相继推出
  4. PG 是目前功能最强大的开源数据库,在数据零丢失、SQL 标准兼容、扩展能力等方面优势明显
  5. 国内外大量头部公司已在生产环境中大规模使用 PG
  6. PG 是替代 Oracle 的最佳开源方案,也是复杂业务场景下的优先选择

下篇预告

第2篇:《为什么选择 PostgreSQL?—— 七大核心优势全面解读》

我们将深入每一种核心优势,通过实际案例和代码演示,让你真正理解 PG 为什么值得投入时间学习。如果你正在做技术选型,这篇文章会给你充分的理由。


下一篇【第02篇】为什么选择PostgreSQL?——七大核心优势全面解读


Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐