现在被称为 PostgreSQL 的对象关系数据库管理系统源自加州大学伯克利分校编写的 POSTGRES 包。经过数十年的发展,PostgreSQL 现在是任何地方可用的最先进的开源数据库。
POSTGRES 项目由 Michael Stonebraker 教授领导,由国防高级研究计划局(DARPA)、陆军研究办公室(ARO)、国家科学基金会(NSF)和 ESL, Inc. 赞助。POSTGRES 的实施始于 1986 年。该系统的初始概念在 [ston86] 中提出,初始数据模型的定义出现在 [rowe87] 中。当时规则系统的设计在 [ston87a] 中描述。存储管理器的基本原理和架构在 [ston87b] 中详细介绍。
此后,POSTGRES 经历了多次重大发布。第一个“演示版”系统于 1987 年投入运营,并在 1988 年的ACM-SIGMOD会议上展示。在 [ston90a] 中描述的版本 1 于 1989 年 6 月发布给少数外部用户。针对对第一个规则系统 ([ston89]) 的批评,重新设计了规则系统 ([ston90b]),版本 2 于 1990 年 6 月发布,其中包含新的规则系统。版本 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%。许多内部更改提高了性能和可维护性。与 POSTGRES 4.2 版相比,Postgres95 1.0.x 版在威斯康星基准测试中的运行速度大约快 30-50%。除了错误修复外,以下是主要的增强功能
查询语言 PostQUEL 被替换为SQL(在服务器中实现)。(接口库 libpq 是以 PostQUEL 命名的。)在 PostgreSQL(见下文)之前不支持子查询,但可以使用用户定义的SQL函数在 Postgres95 中模拟。聚合函数被重新实现。还增加了对 GROUP BY
查询子句的支持。
提供了一个新程序 (psql) 用于交互式 SQL 查询,它使用了GNU Readline。这在很大程度上取代了旧的 monitor 程序。
一个新的前端库 libpgtcl
支持Tcl客户端。一个示例 shell,pgtclsh
,提供了新的 Tcl 命令,用于将 Tcl 程序与 Postgres95 服务器连接。
大对象接口进行了全面检查。反转大对象是存储大对象的唯一机制。(反转文件系统已删除。)
实例级别的规则系统已删除。规则仍然可用作重写规则。
一个简短的教程介绍了常规SQL功能以及 Postgres95 的功能,与源代码一起分发
GNUmake (而不是BSDmake) 用于构建。此外,Postgres95 可以使用未修补的 GCC 进行编译(双精度浮点数的数据对齐已修复)。
到 1996 年,很明显 “Postgres95” 这个名字经不起时间的考验。我们选择了一个新名称 PostgreSQL,以反映原始 POSTGRES 与具有SQL功能的较新版本之间的关系。同时,我们将版本编号设置为从 6.0 开始,将编号放回到伯克利 POSTGRES 项目最初开始的序列中。
许多人继续将 PostgreSQL 称为 “Postgres”(现在很少全部大写),因为传统或因为它更容易发音。这种用法被广泛接受为昵称或别名。
Postgres95 开发期间的重点是识别和理解服务器代码中存在的问题。对于 PostgreSQL,重点已转移到增强功能和能力,尽管所有领域的工作仍在继续。
有关此后 PostgreSQL 中发生的事情的详细信息,请参阅 附录 E。
如果您在文档中发现任何不正确、与您使用特定功能的经验不符或需要进一步澄清的内容,请使用此表格报告文档问题。