现在被称为 PostgreSQL 的对象关系型数据库管理系统起源于加州大学伯克利分校编写的 POSTGRES 软件包。历经数十载的持续演进与开发,PostgreSQL 现已成为全球功能最先进的开源数据库。
关于本文所介绍历史的另一个视角,可参阅 Joe Hellerstein 博士的论文《回顾 Postgres》(“Looking Back at Postgres”)[hell18]。
POSTGRES 项目由迈克尔·斯通布雷克(Michael Stonebraker)教授主持,获得了美国国防高级研究计划局(DARPA)、美国陆军研究办公室(ARO)、国家科学基金会(NSF)以及 ESL 公司的资助。POSTGRES 的工程实现始于 1986 年。该系统的初始概念在 [ston86] 中提出,初始数据模型的定义见于 [rowe87]。当时的规则系统设计在 [ston87a] 中进行了详述,存储管理器的基本原理与系统架构则在 [ston87b] 中完整阐述。
此后,POSTGRES 经历了数个主要版本的发布。首个演示原型系统于 1987 年投入运行,并在 1988 年的 ACM-SIGMOD 大会上进行了展示。[ston90a] 中描述的 Version 1 于 1989 年 6 月向少数外部用户发布。针对对初代规则系统的反馈与批评([ston89]),团队重新设计了规则系统([ston90b]),并于 1990 年 6 月发布了搭载全新规则系统的 Version 2。1991 年发布的 Version 3 增加了对多存储管理器的支持、改进的查询执行器以及重写的规则系统。此后直至 Postgres95(见下文)发布之前,后续版本主要专注于系统的可移植性与稳定性。
POSTGRES 曾被广泛应用于各类科研与生产场景,包括金融数据分析系统、喷气发动机性能监控套件、小行星轨迹跟踪数据库、医疗信息数据库以及多个地理信息系统(GIS)。POSTGRES 还被多所大学用作教学平台。最终,Illustra 信息技术公司(后并入 Informix,现归 IBM 所有)接手了该代码并将其商业化。1992 年底,POSTGRES 成为了 [ston92] 中所述的 Sequoia 2000 科学计算项目的主要数据管理系统。
1993 年,外部用户群体的规模几乎翻了一番。维护原型代码和提供技术支持占据了大量本应投入数据库学术研究的时间,这一矛盾日益突出。为了减轻维护负担,伯克利 POSTGRES 项目在发布 Version 4.2 后正式宣告结束。
1994 年,Andrew Yu 与 Jolly Chen 为 POSTGRES 添加了 SQL 语言解释器。随后,该项目冠以新名称 Postgres95 发布到互联网上,作为原始伯克利 POSTGRES 代码的开源演进版本独立走向世界。
Postgres95 的代码全部采用 ANSI C 编写,代码体积精简了 25%。诸多内部优化显著提升了系统性能与可维护性。在威斯康星基准测试(Wisconsin Benchmark)中,Postgres95 1.0.x 版本的运行速度比 POSTGRES 4.2 版本快约 30% 至 50%。除大量缺陷修复外,其核心改进包括:
在服务器端使用 SQL 取代原有的 PostQUEL 查询语言(接口库 libpq 的命名即源于 PostQUEL)。虽然直到 PostgreSQL(见下文)才原生支持子查询,但 Postgres95 可以通过用户自定义的 SQL 函数进行模拟。重写了聚合函数,并新增了对 GROUP BY 查询子句的支持。
提供了一个用于交互式 SQL 查询的新终端程序(psql),该程序集成了 GNU Readline,基本取代了旧的 monitor 程序。
新增前端接口库 libpgtcl,支持基于 Tcl 的客户端。配套示例 Shell pgtclsh 提供了新的 Tcl 命令,便于 Tcl 程序与 Postgres95 服务器交互通信。
重构了大对象接口。倒排大对象(inversion large objects)成为存储大对象的唯一机制(倒排文件系统被移除)。
移除了实例级规则系统,规则以查询重写规则(rewrite rules)的形式继续提供支持。
随源码附带了介绍标准 SQL 特性以及 Postgres95 专属特性的简明入门教程。
构建系统改用 GNU make(取代原有的 BSD make)。此外,Postgres95 可以直接使用未经打补丁的标准 GCC 进行编译(修复了双精度浮点数的数据内存对齐问题)。
到了 1996 年,显而易见,“Postgres95” 这个带有特定年份的名称无法经受时间的考验。我们选择了新名称 PostgreSQL,以此体现原始伯克利 POSTGRES 与具备现代 SQL 能力版本之间的承继渊源。同时,我们将主版本号重置为 6.0,重新延续伯克利 POSTGRES 项目最初确立的版本号序列。
出于历史渊源以及发音简便的考量,Postgres 如今依然被视为项目的正式通用名称。
在 Postgres95 开发期间,重点在于发现并解决服务器代码中已有的缺陷。而转向 PostgreSQL 之后,工作重心转向了增强特性与功能扩展,各个层面的架构演进与优化全面铺开。
关于自那时起每个 PostgreSQL 版本的演进细节,可参阅官方版本说明页面: https://www.postgresql.org/docs/release/。