现在称为 PostgreSQL 的对象关系数据库管理系统源自加州大学伯克利分校编写的 POSTGRES 软件包。经过几十年的发展,PostgreSQL 现已成为全球最先进的开源数据库。
POSTGRES 项目由迈克尔·斯通布雷克教授领导,由国防高级研究计划局 (DARPA)、陆军研究办公室 (ARO)、国家科学基金会 (NSF) 和 ESL 公司赞助。 POSTGRES 的实施始于 1986 年。该系统的最初概念在 [ston86] 中提出,初始数据模型的定义出现在 [rowe87] 中。当时规则系统的设计在 [ston87a] 中进行了描述。存储管理器的原理和架构在 [ston87b] 中进行了详细说明。
POSTGRES 自那时起经历了几个主要版本。第一个 “demoware” 系统于 1987 年投入运行,并在 1988 年 ACM-SIGMOD 会议上展示。第 1 版在 [ston90a] 中进行了描述,于 1989 年 6 月发布给了一些外部用户。为了回应对第一个规则系统的批评 ([ston89]),规则系统进行了重新设计 ([ston90b]),并于 1990 年 6 月发布了带有新规则系统的第 2 版。第 3 版于 1991 年出现,并增加了对多个存储管理器、改进的查询执行器和重写的规则系统。在很大程度上,直到 Postgres95(见下文)的后续版本都专注于可移植性和可靠性。
POSTGRES 已被用于实现许多不同的研究和生产应用程序。其中包括:财务数据分析系统、喷气发动机性能监控包、小行星跟踪数据库、医疗信息数据库和几个地理信息系统。POSTGRES 也已被用作几个大学的教育工具。最后,Illustra Information Technologies(后来合并到 Informix 中,现在归 IBM 所有)采用了该代码并将其商业化。1992 年末,POSTGRES 成为 Sequoia 2000 科学计算项目 的主要数据管理器。
1993 年,外部用户群体的规模几乎翻了一番。越来越明显的是,维护原型代码和支持占用了大量时间,而这些时间本应用于数据库研究。为了减轻这种支持负担,伯克利 POSTGRES 项目正式以第 4.2 版结束。
1994 年,Andrew Yu 和 Jolly Chen 为 POSTGRES 添加了一个 SQL 语言解释器。在新的名称下,Postgres95 随后发布到网络,作为原始 POSTGRES 伯克利代码的开源后代,在世界上找到了自己的发展道路。
Postgres95 代码完全是 ANSI C,并且大小减少了 25%。许多内部更改提高了性能和可维护性。Postgres95 1.0.x 版本在 Wisconsin Benchmark 上比 POSTGRES 4.2 版快了约 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 进行编译(双精度数据的对齐方式已修复)。
到 1996 年,很明显,名称 “Postgres95” 无法经受时间的考验。我们选择了新名称 PostgreSQL,以反映原始 POSTGRES 与具有 SQL 功能的较新版本之间的关系。同时,我们将版本编号设置为从 6.0 开始,将数字放回到最初由伯克利 POSTGRES 项目开始的序列中。
由于传统或发音更方便,许多人仍然将 PostgreSQL 称为 “Postgres”(现在很少全部大写)。这种用法被广泛接受为昵称或别名。
在 Postgres95 开发期间,重点是识别和理解服务器代码中存在的问题。在 PostgreSQL 中,重点已转向增强功能和能力,尽管所有领域的工作仍在继续。
PostgreSQL 中自那时起发生的事情的详细信息可在 附录 E 中找到。