现在被称为 Postgresql 的对象-关系型数据库管理系统(有一段时间被称为 Postgres95)是从伯克利写的 POSTGRES 软件包发展而来的。经过十几年的发展, Postgresql 是世界上可以获得的最先进的开放源码的数据库系统, 它提供了多版本并行控制,支持几乎所有 sql 构件(包括子查询,事务和用户定义类型和函数), 并且可以获得非常广阔范围的(开发)语言绑定(包括 C,C++,Java,perl,tcl,和 python)。
Michael Stonebraker 领导的 POSTGRES 项目是由防务高级研究项目局(DARPA), 陆军研究办公室(ARO),国家科学基金(NSF), 以及 ESL,Inc 共同赞助的。 POSTGRES 的实现始于 1986 年, 该系统最初的概念详见
POSTGRES的设计
。 最早的数据模型定义见
The POSTGRES Data Model
。 当时的规则系统设计在
POSTGRES 规则系统的设计
里描述. 存储管理器的理论基础和体系结构在
POSTGRES存储系统的设计
里有详细描述。
从那以后,POSTGRES 经历了几次主要的版本更新。 第一个"演示性"系统在 1987 年便可使用了, 并且在 1988 年的 ACM-SIGMOD 大会上展出。在 1989 年六月发布了版本 1(在
POSTGRES的实现
里有描述)给一些外部的用户使用。 为了回应用户对第一个规则系统的批评,(
POSTGRES 规则系统的注解
), 我们重新设计了规则系统(
有关数据库系统的规则,过程,缓存和视图
)并在1990年6月发布了使用新规则系统的版本 2。 版本 3 在1991年出现, 增加了多存储管理器的支持, 并且改进了查询执行器, 重新编写了规则系统。 从那以后,随后的版本直到 Postgres95 发布前(见下文),工作都集中在移植性和可靠性上。
POSTGRES 已经在许多研究或实际的应用中得到了应用。 这些应用包括: 一个财务数据分析系统,一个喷气引擎性能监控软件包,一个小行星跟踪数据库, 一个医疗信息数据库和一些地理信息系统。 POSTGRES 还被许多大学用于教学用途。 最后,Illustra Information Technologies
Illustra Information Technologies
(后来并入
Informix
, 而 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 v4.2 快 30-50%。除了修正了一些错误,下面的是一些主要改进:
-
原来的查询语言 PostQUEL 被 SQL 取代(在 server 端实现)。在 PostgreSQL 之前还不支持子查询(见下文)(但这个功能可以在 Postgres95 里面由用户定义的 SQL 函数实现)。重新实现了聚集。同时还增加了对 GROUP BY 查询子句的支持。 C 程序仍可以调用 libpq接口函数。
-
新增加了利用 GNU Readline 进行交互 SQL 查询(psql)。 这个程序很大程度上取代了老的 monitor 程序。
-
增加了新的前端库, libpgtcl, 用以支持以 Tcl为基础的客户端。一个样本 shell, pgtclsh,提供了新的 Tcl 命令用于 Tcl 程序和 Postgres95 后端之间的交互。
-
彻底重写了大对象的接口。 保留了将大对象倒转(Inversion )作为存储大对象的唯一机制。 (去掉了倒转(Inversion )文件系统。)
-
去掉了记录级(instance-level )的规则系统。 但我们仍然可以通过重写规则使用规则。
-
在发布的源码中增加了一个简短的常用 SQL 和 Postgres95 特有的 SQL 特性的教程。
-
用GNU make (取代了 BSD make)用于制作。 Postgres95 可以使用不加补丁的 GCC (修正了偶数字节数据( doubles )的对齐问题)。