PostgreSQL 的诞生:伯克利实验室的数据库革命
当关系型数据库还处于早期阶段时,一位教授在伯克利实验室开启了一场静默的革命...
导语
1985年的冬天,加州大学伯克利分校的计算机科学实验室里,迈克尔·斯通布雷克教授盯着黑板上密密麻麻的关系代数公式,陷入了沉思。当时的数据库世界被 IBM 的 System R 和 Oracle 的商用数据库统治,但斯通布雷克看到了一个根本性的局限:这些系统只能处理简单的表格数据,而无法表达真实世界的复杂性——地理位置、时间序列、多媒体内容。“如果数据库不能表示复杂对象,那它就不配被称为数据库。“他在笔记本上写下这句话,开启了一场持续至今的革命。35年后,PostgreSQL 成为全球最受信任的开源数据库,支撑着从初创公司到财富500强的关键业务。
时代背景(Why now)
要理解 PostgreSQL 的诞生,我们需要回到1980年代的数据库战场。
关系型数据库的崛起
1970年,IBM 研究员埃德加·科德发表了开创性论文《A Relational Model of Data for Large Shared Data Banks》,奠定了关系型数据库的理论基础。1979年,年轻的 Larry Ellison 创立了 Oracle,推出了第一个商用关系型数据库。1980年代,关系型数据库开始挑战层次型数据库(如 IBM 的 IMS)和网络型数据库的市场地位。
1986年,美国国家标准协会(ANSI)将 SQL 定为标准查询语言,关系型数据库正式成为行业主流。
但问题依然存在。
早期的关系型数据库(包括 Oracle、DB2、Informix)都有一个共同的限制:它们严格遵循”表格”模型。数据被组织成行和列,每行代表一个记录,每列代表一个属性。这种模型适合存储客户名单、订单记录等简单数据,但面对复杂场景时捉襟见肘:
- 如何存储和查询地理信息(如”找出离我2公里内的所有餐厅”)?
- 如何处理时间序列数据(如”计算过去30天的平均温度”)?
- 如何支持自定义数据类型(如”创建一个表示 DNA 序列的数据类型”)?
当时的解决方案是在应用程序层处理这些复杂性,数据库只负责存储简单的表格。但这意味着大量数据需要在应用和数据库之间往返传输,效率低下。
Ingres 的遗产
1970年代中期,伯克利的斯通布雷克教授已经开始思考这些问题。1974年,他启动了 Ingres(INteractive GRaphics and REtrieval System)项目,目标是构建一个关系型数据库原型。Ingres 在学术界大获成功,被许多大学用于研究和教学。
1980年,斯通布雷克和一些学生创立了 Relational Technology Inc.(后来更名为 Ingres Corporation),将 Ingres 商业化。到1985年,Ingres 已经成为仅次于 Oracle 的第二大关系型数据库厂商。
但斯通布雷克并没有停下脚步。他意识到,关系型数据库需要演进,需要支持更丰富的数据模型。这就是 PostgreSQL 故事的起点。
产品诞生(Origin Story)
1985年,斯通布雷克在伯克利开始了一个新项目,代号”Postgres”(Post Ingres 的缩写)。
“我们的目标是超越传统关系型数据库,“斯通布雷克在 1986 年的项目提案中写道,“我们需要支持复杂对象、用户定义的数据类型、规则和触发器。简单说,我们需要一个’对象-关系’数据库。”
这个愿景在今天看来理所当然,但在1980年代是革命性的。当时,面向对象编程刚刚兴起(C++ 于1985年发布),学术界正在激烈讨论”对象数据库”是否会取代”关系数据库”。斯通布雷克的洞察是:不是取代,而是融合。
Postgres 项目的核心创新包括:
1. 可扩展的数据类型系统
Postgres 允许用户定义自己的数据类型和运算符。例如,你可以创建一个”复数”类型,并定义复数的加法、乘法运算。数据库会知道如何存储、索引和查询这些自定义类型的数据。
2. 继承和层次结构
借鉴面向对象编程,Postgres 支持表继承。你可以创建一个”车辆”基表,然后让”汽车”和”卡车”表继承它。查询”车辆”会自动包含”汽车”和”卡车”的数据。
3. 规则系统
Postgres 引入了规则(Rules),允许在数据库层面定义业务逻辑。例如,“当订单金额超过1000美元时,自动发送邮件通知经理”。这在当时是非常先进的特性。
4. 存储过程
Postgres 支持在数据库内部执行用户自定义函数,使用一种专门设计的语言 PostQUEL(后来演变为 PL/pgSQL)。
斯通布雷克带领一个研究生团队,包括当时的博士生 Lawrence Rowe 和 Hong Chen,开始了艰苦的开发工作。项目获得了美国国家科学基金会(NSF)、国防高级研究计划局(DARPA)和美国地质调查局(USGS)的资助。
1989年,Postgres 1.0 发布。这不是一个商业产品,而是学术研究的原型,但已经展示了对象-关系模型的强大潜力。
第一个关键突破(First Breakthrough)
Postgres 的第一个关键突破,来自于1994年的一个重大架构调整。
早期版本的 Postgres 使用一种名为 PostQUEL 的查询语言,这是 Ingres 的 QUEL 语言的扩展。但到1990年代初,SQL 已经成为事实上的标准,PostQUEL 逐渐显得过时。
Andrew Yu 和 Jolly Chen,两位伯克利的研究生,接到了一个任务:为 Postgres 添加 SQL 支持。
这是一个比预期复杂得多的工程。SQL 和 PostQUEL 的语法、语义都有很大差异,需要重写查询解析器和执行引擎。但 Yu 和 Chen 完成了这项任务,而且做得很好。
1995年,支持 SQL 的 Postgres95 发布。团队意识到,这标志着 Postgres 从一个研究项目向生产级数据库的转变。
更名 PostgreSQL
1996年,Postgres95 更名为 PostgreSQL。这个名字的选择经过了激烈讨论:
- “Postgres” 保留了项目的历史传承
- “SQL” 强调了标准查询语言的支持
新名字也意味着新的使命:成为一个真正的开源、生产级数据库。
同年,PostgreSQL 的源代码被放到互联网上,采用 BSD 许可证——一种极其宽松的开源许可证,允许任何人自由使用、修改,甚至商业化,无需支付任何费用。
这个决策后来被证明是极其明智的。BSD 许可证让 PostgreSQL 可以被集成到各种商业产品中,从 Web 应用到嵌入式系统,从云服务到企业软件。PostgreSQL 开始出现在 FreeBSD、Linux 发行版中,成为开源生态的核心组件。
扩张阶段(Growth)
1996年至2005年,是 PostgreSQL 的社区建设期。
项目由一群全球志愿者维护,没有商业公司控制。核心开发团队(称为”PostgreSQL Global Development Group”)每3-4个月发布一个新版本,每个版本都带来重大改进:
- 1997年(PostgreSQL 6.0):引入 MVCC(多版本并发控制),解决了读写冲突问题
- 1998年(PostgreSQL 6.4):支持 SQL 92 标准的大部分特性
- 2001年(PostgreSQL 7.1):重写查询优化器,性能大幅提升
- 2003年(PostgreSQL 7.4):引入预编译语句和游标
- 2005年(PostgreSQL 8.0):原生支持 Windows 平台
社区也在壮大。邮件列表、IRC 频道、本地用户组相继建立。PostgreSQL 的用户开始包括 Yahoo!、MySpace、Afilias(.info 域名注册局)等大型互联网公司。
但 PostgreSQL 的增长相对缓慢,尤其是在企业市场。Oracle、DB2、SQL Server 占据了商业数据库的大部分份额,MySQL 则统治了 Web 应用领域。
PostgreSQL 的优势——功能丰富、标准兼容、可扩展——在当时反而成为劣势。开发者觉得它”太重”,学习曲线太陡峭,不如 MySQL 简单直接。
这种局面在2005年后开始改变。
关键竞争(Competition)
PostgreSQL 的竞争态势,在2005年至2010年间发生了根本性转变。
MySQL 的收购与分裂
2008年,Sun Microsystems 以10亿美元收购 MySQL AB。这在开源社区引发轩然大波——MySQL 是最受欢迎的开源数据库,现在被一家大公司控制。
更令人担忧的是,MySQL 的创始人 Michael Widenius(Monty)对收购表示不满。他担心 Sun 会削弱 MySQL 的开源特性,于是创立了 MariaDB——一个 MySQL 的分支。
2010年,Oracle 收购 Sun Microsystems,MySQL 落入 Oracle 手中。这进一步加剧了社区的担忧:Oracle 是否会牺牲 MySQL 来保护自己的商业数据库业务?
PostgreSQL 的机会
这些动荡让 PostgreSQL 获得了前所未有的关注。开发者开始寻找”真正的开源”替代品,不受单一公司控制。PostgreSQL 的社区驱动模式、BSD 许可证、丰富的功能集,让它成为理想选择。
PostgreSQL 全球开发团队加快了开发节奏:
- 2010年(PostgreSQL 9.0):引入流复制和热备,终于具备真正的高可用性
- 2012年(PostgreSQL 9.2):原生 JSON 支持,开始拥抱 NoSQL 浪潮
- 2014年(PostgreSQL 9.4):JSONB 数据类型,提供二进制 JSON 存储和索引
JSONB 的引入尤其重要。它让 PostgreSQL 既能保持关系型数据库的严谨性,又能处理文档型数据。开发者可以用 PostgreSQL 替代 MongoDB,同时享受 SQL 的强大查询能力。
云时代的崛起
2010年代,云计算彻底改变了数据库市场。AWS RDS(2009年推出)和 Google Cloud SQL(2011年推出)都选择 PostgreSQL 作为首批支持的数据库之一。
云厂商的选择不是偶然的。PostgreSQL 的许可证允许他们自由修改和集成;PostgreSQL 的扩展架构让他们可以添加自己的特色功能(如 AWS 的 Aurora PostgreSQL);PostgreSQL 的声誉让企业的 CTO 们放心。
拐点(Turning Point)
PostgreSQL 的拐点出现在2015年至2018年间,由三个关键事件推动。
事件一:9.6 和 10 版本的性能飞跃
2016年发布的 PostgreSQL 9.6 引入了并行查询,可以充分利用多核 CPU。2017年的 PostgreSQL 10 进一步增强了并行性,并引入了逻辑复制。
这些改进让 PostgreSQL 在 OLAP(分析型)工作负载上表现优异,可以直接与数据仓库产品竞争。Uber、Netflix 等公司开始用 PostgreSQL 替代昂贵的商业数据仓库。
事件二:PostGIS 和地理数据库统治地位
PostGIS 是 PostgreSQL 的空间数据库扩展,2001年首次发布。到2010年代,PostGIS 已经成为功能最丰富的空间数据库,支持复杂的地理分析、空间索引、栅格数据。
2010年代,位置服务应用爆发——Uber、Lyft、Google Maps、Foursquare。这些应用背后,几乎都是 PostgreSQL + PostGIS。
PostGIS 的成功反过来推动了 PostgreSQL 的普及。地理数据开发者发现,他们需要的不仅是空间功能,还需要一个完整、可靠的数据库系统。PostgreSQL 正好满足了这个需求。
事件三:云原生 Postgres 的兴起
2010年代末,一系列新项目让 PostgreSQL 焕发新生:
- Citus(2016年):PostgreSQL 的分布式扩展,让 PostgreSQL 可以水平扩展到数百个节点
- TimescaleDB(2017年):时序数据扩展,让 PostgreSQL 成为强大的时序数据库
- pgAdmin 4(2016年):现代化的管理工具,降低了使用门槛
这些扩展让 PostgreSQL 不再只是一个”通用数据库”,而是一个可以针对特定场景优化的平台。
结果(Outcome)
到2024年,PostgreSQL 已经成为世界上最受欢迎的数据库之一。
市场地位:
- Stack Overflow 开发者调查连续多年将 PostgreSQL 评为”最受欢迎的数据库”
- DB-Engines 排名将 PostgreSQL 列为第四大数据库(仅次于 Oracle、MySQL、SQL Server),但增长速度最快
- 超过 50% 的财富 500 强公司使用 PostgreSQL
用户案例:
- Apple:iCloud、App Store、Apple Music 等服务使用 PostgreSQL
- Instagram:早期完全基于 PostgreSQL,每天处理数亿张照片
- Reddit:评论和投票系统基于 PostgreSQL
- Spotify:用户数据和播放列表存储在 PostgreSQL
- Netflix: billing 系统使用 PostgreSQL
云原生生态:
- AWS RDS/Aurora:PostgreSQL 是最受欢迎的数据库引擎之一
- Google Cloud SQL:PostgreSQL 是主打产品
- Azure Database:提供托管 PostgreSQL 服务
- Supabase:开源 Firebase 替代品,基于 PostgreSQL
- Neon、CockroachDB:新一代云原生数据库,兼容 PostgreSQL 协议
PostgreSQL 16(2023年):
- 更好的并行查询性能
- 增强的逻辑复制
- JSON 性能优化
- 安全性增强
规律总结(Lessons)
PostgreSQL 的故事,是开源软件史上最持久的成功之一。
1. 学术严谨性
PostgreSQL 诞生于伯克利,继承了学术界的严谨传统。每一个功能都经过深思熟虑,代码质量始终如一。这种严谨性让 PostgreSQL 成为”工程师的数据库”——你可以信任它,因为它从不取巧。
2. 社区优于公司
PostgreSQL 没有被任何单一公司控制。全球开发组由志愿者组成,决策通过共识达成。这种模式虽然不如商业公司高效,但保证了项目的独立性和长期可持续性。
3. 扩展架构的力量
PostgreSQL 的可扩展架构是其最大优势。从 PostGIS 到 TimescaleDB,从 pgVector 到 Citus,扩展让 PostgreSQL 可以适应几乎任何场景,而无需修改核心代码。
4. 标准的重要性
PostgreSQL 始终坚持 SQL 标准。当其他数据库走捷径时,PostgreSQL 选择正确的方式实现。这让 PostgreSQL 成为迁移到开源数据库的最佳选择——你的 SQL 代码几乎可以无缝迁移。
5. 长期主义
从1985年到2024年,PostgreSQL 已经持续开发了近40年。期间经历了无数次技术浪潮——从客户端/服务器架构到 Web 应用,从移动应用到云计算,从事务处理到 AI 向量搜索。PostgreSQL 始终能够适应,因为它建立在坚实的基础上。
6. 许可证的选择
BSD 许可证让 PostgreSQL 可以被广泛采用,包括商业产品。许多公司(包括 Apple、AWS)在 PostgreSQL 基础上构建了自己的数据库产品,而不需要回馈代码。虽然这在开源纯粹主义者看来有争议,但它确实推动了 PostgreSQL 的普及。
“我们不是在构建另一个数据库,而是在重新思考数据应该如何被存储和查询。PostgreSQL 不仅仅是一个软件项目,它是一场关于数据管理可能性的持续探索。”
—— 迈克尔·斯通布雷克,PostgreSQL 创始人,2014年图灵奖得主