受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: devel

2. PostgreSQL简史 #

如今名为PostgreSQL的对象关系数据库管理系统, 源自加州大学伯克利分校编写的POSTGRES软件包。 经过数十年的发展,PostgreSQL如今已成为当今最先进的开源数据库。

这里所介绍的这段历史的另一种讲法,可见于 Joe Hellerstein 博士的论文 Looking Back at Postgres [hell18]

2.1. 伯克利 POSTGRES 项目 #

由 Michael Stonebraker 教授领导的 POSTGRES 项目, 得到了国防高级研究计划局(DARPA)、陆军研究办公室(ARO)、 国家科学基金会(NSF)以及 ESL, Inc. 的资助。 POSTGRES 的实现始于 1986 年。 该系统的最初概念见于 [ston86],而最初数据模型的定义见于 [rowe87]。当时规则系统的设计见于 [ston87a]。 存储管理器的设计动机和体系结构详见 [ston87b]

自那以后,POSTGRES 经历了几次重大版本发布。 第一个演示版系统于 1987 年开始运行,并在 1988 年的 ACM-SIGMOD 大会上进行了展示。版本 1 在 [ston90a] 中有描述, 并于 1989 年 6 月发布给少数外部用户。 针对第一代规则系统所受到的批评([ston89]),规则系统被重新设计([ston90b]), 版本 2 连同新的规则系统于 1990 年 6 月发布。 版本 3 于 1991 年问世,增加了对多个存储管理器的支持、改进后的查询执行器以及重写后的规则系统。 此后直到 Postgres95(见下文)之前的后续版本, 主要聚焦于可移植性和可靠性。

POSTGRES 被用于实现许多不同的研究和生产应用。 这些应用包括金融数据分析系统、喷气发动机性能监测软件包、小行星跟踪数据库、 医疗信息数据库以及若干地理信息系统。 POSTGRES 还在多所大学中被用作教学工具。 最后,Illustra Information Technologies(后来并入 Informix, 该公司现归 IBM 所有)接手了这套代码并将其商业化。 在 1992 年末,POSTGRES 成为 [ston92] 中描述的 Sequoia 2000 科学计算项目的主要数据管理器。

1993 年期间,外部用户社区的规模几乎翻了一番。 人们越来越清楚地意识到,对原型代码的维护和支持工作占用了大量本应用于数据库研究的时间。 为了减轻这一支持负担,伯克利 POSTGRES 项目在版本 4.2 时正式结束。

2.2. Postgres95 #

1994 年,Andrew Yu 和 Jolly Chen 为 POSTGRES 添加了一个 SQL 语言解释器。 随后,它以 Postgres95 这一新名称发布到网络上, 作为最初的 POSTGRES 伯克利代码的开源后继者自行发展。

Postgres95 的代码完全采用 ANSI C 编写,并将体积缩减了 25%。 许多内部更改提升了性能和可维护性。 与 POSTGRES 4.2 版相比, Postgres95 1.0.x 版本在 Wisconsin Benchmark 上快了大约 30–50%。 除了错误修复之外,主要增强还包括:

  • 查询语言 PostQUEL 被 SQL 所取代(在服务器中实现)。 (接口库 libpq 的名称来源于 PostQUEL。) 直到 PostgreSQL(见下文)才支持子查询, 但在 Postgres95 中可以用用户定义的 SQL 函数来模拟。 聚合函数也得到了重新实现,并增加了对 GROUP BY 查询子句的支持。

  • 新增了一个用于交互式 SQL 查询的程序(psql), 它使用了 GNU Readline。 这在很大程度上取代了旧的 monitor 程序。

  • 新增的前端库 libpgtcl 支持基于 Tcl 的客户端。 示例 shell pgtclsh 提供了新的 Tcl 命令, 用于让 Tcl 程序与 Postgres95 服务器交互。

  • 大对象接口经过了全面改造。反转大对象成为存储大对象的唯一机制。 (反转文件系统已被移除。)

  • 实例级规则系统被移除。规则仍然可以作为重写规则使用。

  • 源代码中附带了一份简短教程,介绍常规 SQL 特性以及 Postgres95 的特性。

  • 构建时使用的是 GNU make(而不是 BSD make)。 此外,Postgres95 可以用未经修改的 GCC 编译 (双精度浮点数的数据对齐问题已修复)。

2.3. PostgreSQL #

到了 1996 年,很明显 Postgres95 这个名字经不起时间的考验。 我们选择了一个新名字 PostgreSQL, 以体现最初的 POSTGRES 与后来具备 SQL 能力的版本之间的关系。 同时,我们将版本号从 6.0 开始,使编号重新回到最初由伯克利 POSTGRES 项目开启的序列中。

Postgres 至今仍被视为正式的项目名称, 一方面是出于传统,另一方面是因为人们觉得 PostgresPostgreSQL 更容易发音。

在开发 Postgres95 期间,重点是识别并理解服务器代码中已有的问题。 到了 PostgreSQL 阶段,重点则转向增强特性和能力, 不过各个方面的工作仍在继续。

关于此后每个 PostgreSQL 发布版本发生了哪些变化的详情,可在 https://www.postgresql.org/docs/release/ 查阅。

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。