被创始人几乎放弃了的Postgres顽强地生存下来,并大有超越MySQL成为开源领头羊之势

作者: CBISMB

责任编辑: 邹大斌

来源: CBISMB

时间: 2026-06-23 11:53

浏览: 2

点赞: 27

收藏: 4

如今,Postgres是使用最广泛的数据库系统之一,但它诞生之初的经历可以说是极不顺遂。

如果没有一批异常执着的开源贡献者,它很可能早已沦为另一个被遗忘的失败者——就像它的前身Ingres一样("Postgres"是"Post-Ingres"的缩写)。

两套系统的创造者迈克尔·斯通布雷克(Michael Stonebraker)是该领域公认的数据库先驱。本月初,他在美国PostgreSQL协会于波士顿举办的PGDay大会上发表演讲,详细讲述了这一开源数据库系统的曲折历史——事实上,它的诞生远早于"开源"这个词本身的出现。

斯通布雷克说:"从某种意义上说,Postgres是开源软件的典范,因为它不属于任何人。它被一群没有任何特定机构背书的程序员接手,才走到了今天。"

斯通布雷克在20世纪90年代中期基本上放弃了Postgres。但它并没有就此销声匿迹,而是被一个斗志昂扬的志愿者社区接管,在保留斯通布雷克革命性可扩展架构的同时,接入了标准SQL。

三十年后,这个固执的独立数据库已成为现代云基础设施的基石。

数据应当是关系型的

说到关系型数据库系统,英国计算机科学家、时任IBM员工特德·科德(Ted Codd)在1970年打响了第一枪。数据库是存储数据并以可预测方式进行查询的地方,而数据库系统则是管理数据库的软件(两者不可混淆)。

那一年,科德提出所有数据都应存储在表中,并通过高级查询语言访问。IBM将这一思想落地为System R,并创建了SQL作为查询语言,最终演变为IBM的DB2。

当时还是加州大学伯克利分校助理教授的斯通布雷克也实现了科德的想法。他带领研究生团队不仅做出了可运行的原型,还完成了完整的系统实现——他后来联合创办了Relational Technology公司,将Ingres推向商用。Ingres没有使用SQL,而是采用了另一种查询语言QUEL,尽管两者在核心理念上颇为相似。

一个相当早期的Ingres版本甚至向学术研究免费开放。但到了1980年代初,斯通布雷克已经"把那些代码推下了悬崖",开始构建全新的东西。

于是,Postgres诞生了。

超越Ingres:Postgres的诞生

彼时,斯通布雷克解释说,商业世界正在推动数据库存储更多的数据类型,不再局限于基础业务记账所需的整数、浮点数和字符串,还需要处理复杂的CAD数据和GIS数据,这些数据包含多个需要存储和推理的数据点。

在斯通布雷克看来,理想的数据库系统必须能够通过更多数据类型、用户自定义数据类型、用户自定义运算符和用户自定义函数来进行扩展。

扩展数据类型听起来似乎不难,但"魔鬼藏在细节里",他说。"你需要让查询优化器理解新的数据类型,这并不容易。"换向规则需要梳理清楚,还需要进行优化。

这促成了Postgres最成功的特性诞生:对抽象数据类型(ADT)的支持。

斯通布雷克对Postgres还有其他抱负。他希望引入Chris Date关于参照完整性的研究成果,为关系模型带来"外键与主键之间的语义一致性"。他想加入规则引擎,持续监控变化并据此作出决策。他还想实现崩溃恢复。

崩溃恢复和规则引擎最终没能如愿,但ADT生根发芽——如今几乎所有数据库系统都支持这种可扩展性,其实现方式与斯通布雷克1983年的设计如出一辙。

"我们基本上做对了,"他说。事实上,他认为ADT方面的工作可能正是他荣获ACM 2014年图灵奖的主要原因。

斯通布雷克和同事们急于从中获益,于是将Postgres纳入了初创公司Illustra,后者随后被Informix收购,将这项技术消化进自家数据库服务器。

但他们同时也维护着一个开源版本……勉强维护着。那时甚至还没有"开源"这个说法(该词直到1998年才正式成为术语)。这只是可供其他研究人员自由使用的学术软件,基于宽松的BSD许可证发布。

那个拒绝消亡的架构

1995年,两位伯克利研究生安德鲁·余(Andrew Yu)和陈乔利(Jolly Chen)将Postgres从最后一个4.2学术版本中复活。他们抛弃了运行不稳定的规则引擎和灾难恢复功能,最重要的是,将QUEL替换为当时的行业标准SQL,以"Postgre95"(后改名为PostgreSQL)的名义发布了软件。

"我一个都不认识,"斯通布雷克谈到这支全志愿者开发团队时说。他们是"一群超级程序员,接手了这个开源项目,并开始推动它向前发展,一推就是30年"。

这种独立自主使Postgres可以被任何人自由使用和修改。Postgres的线路协议被广泛用作构建其他数据库系统的基础,包括CockroachDB、YugabyteDB和TimescaleDB。亚马逊AWS、微软Azure和谷歌云各自构建了基于Postgres的数据库即服务,核心卖点都是完全兼容Postgres。

"这些大象基本上把所有筹码都压在了Postgres上,"他说。

就连AWS的图数据库服务也是基于Postgres构建的("关系型实现的图数据库,几乎总是比原生实现更快,通常快得多,"斯通布雷克调侃道)。

登顶

如今,Postgres在全球最受欢迎数据库系统的DB-Engines排名中高居前列,仅次于Oracle、MySQL和Microsoft SQL Server。但与这些竞争对手不同,Postgres仍在持续稳定地扩大市场份额。

汤姆·金凯德(Tom Kincaid)协助组织了PGDay会议,同时也是Postgres服务公司EDB的副总裁。他从多个角度分析了Postgres为何能产生如此深远的影响——尽管最初没有任何IT巨头的背书(不像同为开源的MySQL,由Oracle管理,而很多开源人士仅凭这一点就对MySQL心存疑虑)。

可扩展性在推动采用方面功不可没,尤其是随着数据库的应用范围从基础业务记账大幅扩展。ADT让Postgres轻松进入不断增长的地理空间市场,以及后来的文档数据库领域。

"Postgres能够迅速为开发者提供存储、检索和搜索JSON文档所需的一切,"金凯德说,"能够将SQL与多种数据类型结合起来,让它得以随着每一波应用开发新趋势蓬勃发展。"

代码库的高质量同样功不可没("它经过最严格标准的审查,"金凯德说),这吸引了顶尖开发者,优秀的优化器也是原因之一。宽松的许可证同样起到了助推作用,让初创公司和项目负责人能够自由构建衍生产品,无需担忧法律风险。

Postgres为何至今没有文件级加密

尽管获得了开源社区的厚爱,Postgres仍然缺少一些与商业数据库系统保持竞争力所需的功能。

这正是长期Postgres贡献者布鲁斯·莫姆简(Bruce Momjian)在PGDay另一场颇具启发性的演讲中所聚焦的议题。他列举了一长串缺失功能,其中大多数开发团队目前都在积极攻克。

例如,数据库系统需要64位事务ID以支持超大型数据库;列式存储在大规模数据分析中大行其道,但Postgres同样缺席;全局索引、服务器线程化、内部连接池和分片等功能也处于不同的开发阶段。

然而,Postgres目前最重要的缺失功能是文件级加密,即业界所称的"透明数据加密"(TDE)。TDE已被所有商业数据库厂商支持,也是存储金融交易数据的最新PCI DSS规范所要求的。目前,Postgres将加密工作交由操作系统处理。

Postgres文件级加密的开发工作目前"在很多方面陷入了停滞",莫姆简说。"代码改动的代价与功能价值不成比例,"他说。不仅涉及数据文件本身的函数需要修改,系统中所有写入临时文件的散落函数也都需要改动。这将是一项"规模庞大"的工程。

尽管如此,缺失的功能反而给商业实体留下了填补空白的机会。例如,Percona就在其自有的Postgres商业发行版中提供了这一功能。

商业数据库公司对客户需求极为敏感,无论这些需求在实际技术层面是否真的必要,还是仅仅出于外部监管要求。

后者往往无法迅速跻身Postgres优先级列表的前列,莫姆简说。"我们不想添加一个没有真正技术价值的功能,"他说。

莫姆简还指出,从纯技术角度看,PCI规定本身的价值同样存疑。一旦内容被复制到服务器内存中,加密保护便消失无踪。如果攻击者能够绕过文件系统权限,他们很可能也能读取原始工作内存并获取加密密钥。

"如果我们想锁定文件系统,就必须同时锁定内存。但我们还不知道怎么做到,"他说。

但TDE的缺席或许根本不是缺陷,而恰恰是Postgres核心哲学的体现。

"商业数据库瞄准最大客户的工作负载,Postgres瞄准的是普通用户的工作负载,"他说。

而对于一个开源项目来说,这或许才是最好的成功方式。

©本站发布的所有内容,包括但不限于文字、图片、音频、视频、图表、标志、标识、广告、商标、商号、域名、软件、程序等,除特别标明外,均来源于网络或用户投稿,版权归原作者或原出处所有。我们致力于保护原作者版权,若涉及版权问题,请及时联系我们进行处理。