简介
PostgreSQL 是一种基于 POSTGRES 4.2 的对象关系数据库管理系统(ORDBMS),由加州大学伯克利分校计算机科学系开发。POSTGRES 首创了许多概念,这些概念在一些商业数据库系统中直到后来才得以实现。
PostgreSQL 是这一原始伯克利代码的开源后代。它支持 SQL 标准的很大一部分,并提供许多现代特性:
- 复杂查询
- 外键
- 触发器
- 可更新视图
- 事务完整性
- 多版本并发控制
此外,PostgreSQL 可以通过用户以多种方式扩展,例如添加新的:
- 数据类型
- 函数
- 运算符
- 聚合函数
- 索引方法
- 过程语言
由于其宽松的许可证,PostgreSQL 可以被任何人免费用于、修改和分发,无论是用于私人、商业还是学术目的。
历史
1. 伯克利 POSTGRES 项目
现称为 PostgreSQL 的对象关系数据库管理系统源自加州大学伯克利分校开发的 POSTGRES 软件包。经过数十年的发展,PostgreSQL 现在是全球最先进的开源数据库。
POSTGRES 项目由迈克尔·斯通布雷克教授领导,得到了国防高级研究计划局(DARPA)、陆军研究办公室(ARO)、国家科学基金会(NSF)和 ESL, Inc. 的赞助。POSTGRES 的实现始于 1986 年。该系统的初始概念在 [ston86] 中提出,初始数据模型的定义出现在 [rowe87] 中。规则系统的设计在当时的 [ston87a] 中描述。存储管理器的原理和架构在 [ston87b] 中详细阐述。
自那时以来,POSTGRES 经过几次主要版本更新。第一个“演示软件”系统于 1987 年投入运行,并在 1988 年的 ACM-SIGMOD 会议上展示。版本 1 在 1989 年 6 月发布给少数外部用户,相关描述见 [ston90a]。针对第一版规则系统的批评 ([ston89]),规则系统进行了重新设计 ([ston90b]),并于 1990 年 6 月发布了带有新规则系统的版本 2。版本 3 于 1991 年推出,增加了对多个存储管理器的支持、改进的查询执行器和重写的规则系统。在 Postgres95 之前的后续版本大多集中在可移植性和可靠性上。
POSTGRES 被用于实现许多不同的研究和生产应用,包括金融数据分析系统、喷气发动机性能监控软件、小行星跟踪数据库、医疗信息数据库以及多个地理信息系统。POSTGRES 还在多所大学作为教育工具使用。最后,Illustra 信息技术公司(后与 Informix 合并,目前由 IBM 拥有)接管了代码并进行了商业化。在 1992 年末,POSTGRES 成为 Sequoia 2000 科学计算项目的主要数据管理系统。
在 1993 年,外部用户社区的规模几乎翻了一番。维护原型代码和支持工作占用了大量本应用于数据库研究的时间。为了减轻这一支持负担,伯克利 POSTGRES 项目在版本 4.2 时正式结束。
2. Postgres95
1994 年,安德鲁·余和贾利·陈为 POSTGRES 添加了 SQL 语言解释器。随后以新名称 Postgres95 发布,作为原始 POSTGRES 伯克利代码的开源后代在网络上寻找自己的发展道路。
Postgres95 的代码完全采用 ANSI C,体积缩小了 25%。许多内部更改提高了性能和可维护性。与 POSTGRES 版本 4.2 相比,Postgres95 版本 1.0.x 在威斯康辛基准测试中的运行速度提高了约 30% 到 50%。除了修复错误,以下是主要增强功能:
- 查询语言 PostQUEL 被替换为 SQL(在服务器中实现)。接口库 libpq 以 PostQUEL 命名。Postgres95 不支持子查询,但可以通过用户定义的 SQL 函数进行模拟。聚合函数被重新实现,并增加了对 GROUP BY 查询子句的支持。
- 提供了一种新程序(psql)用于交互式 SQL 查询,使用 GNU Readline。这在很大程度上取代了旧的监视程序。
- 新的前端库 libpgtcl 支持基于 Tcl 的客户端。示例 shell pgtclsh 提供了新的 Tcl 命令,以便与 Postgres95 服务器接口。
- 大对象接口进行了彻底修改。反向大对象是存储大对象的唯一机制(反向文件系统被移除)。
- 实例级规则系统被移除,规则仍作为重写规则可用。
- 附带源代码的简短教程介绍了常规 SQL 特性以及 Postgres95 的特性。
- 使用 GNU make(而非 BSD make)进行构建。此外,Postgres95 可以在未打补丁的 GCC 上编译(修复了双精度数据的对齐问题)。
3. PostgreSQL
到 1996 年,显然“Postgres95”这个名称无法经受时间的考验。我们选择了新名称 PostgreSQL,以反映原始 POSTGRES 与具有 SQL 能力的较新版本之间的关系。同时,我们将版本编号设置为从 6.0 开始,恢复了伯克利 POSTGRES 项目最初开始的序列。
许多人继续称 PostgreSQL 为“Postgres”(现在很少全大写),这是出于传统或因为更容易发音。这种用法被广泛接受,作为昵称或别名。
在 Postgres95 的开发过程中,重点是识别和理解服务器代码中存在的问题。随着 PostgreSQL 的发展,重点转向增强功能和能力,尽管在所有领域的工作仍在继续。
关于 PostgreSQL 自那以来发生的详细情况,可以在附录 E 中找到。
来源
本文翻译于postgresql.org