🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# PostgreSQL简史 现在被称为PostgreSQL的对象-关系型数据库管理系统是从美国加州大学伯克利 分校编写的POSTGRES软件包发展而来的。经过二十几年的发展,PostgreSQL 是目前世界上可以获得的最先进的开放源码数据库系统。 ## Berkeley 的POSTGRES项目 Michael Stonebraker领导的POSTGRES项目 是由防务高级研究项目局(DARPA)、陆军研究办公室(ARO)、国家科学基金 (NSF)、ESL公司共同赞助的。POSTGRES的实现始于1986年,该系统最初的 概念详见[](#calibre_link-1312) [POSTGRES的设计](http://db.cs.berkeley.edu/papers/ERL-M85-95.pdf) ,最早的数据模型定义见 [](#calibre_link-1313)[POSTGRES数据模型](http://db.cs.berkeley.edu/papers/ERL-M87-13.pdf) 。当时的规则系统设计在[_POSTGRES规则系统的设计_](#calibre_link-1314) 里描述。存储管理器的理论基础和体系结构在 [](#calibre_link-1315)[POSTGRES存储系统设计](http://db.cs.berkeley.edu/papers/ERL-M87-06.pdf) 里有详细描述。 从那以后,POSTGRES经历了几次主要的 版本更新。第一个"演示性"系统在1987年便可使用了, 并且在1988年的ACM-SIGMOD大会上展出。在1989年 6月发布了版本1(在[](#calibre_link-1316) [POSTGRES的实现](http://db.cs.berkeley.edu/papers/ERL-M90-34.pdf) 里有描述)给一些外部的用 户使用。为了回应用户对第一个规则系统的批评 ([](#calibre_link-1317) [POSTGRES规则系统注解](http://db.cs.berkeley.edu/papers/ERL-M89-82.pdf) ),我们重新设计了规则系统 ([](#calibre_link-1318) [数据库系统中的规则,过程,缓存和视图](http://db.cs.berkeley.edu/papers/ERL-M90-36.pdf) ),并在1990年6月发布了使用新规则系统的 版本2。版本3在1991年出现,增加了多存储管理器的支持,并且改进了 查询执行器,重新编写了规则系统。从那以后,随后的版本直到 Postgres95发布前(见下文),工作都集中 在移植性和可靠性上。 POSTGRES已经在许多研究或实际的应用中 得到了应用。这些应用包括:一个财务数据分析系统、一个喷气引擎 性能监控软件包、一个小行星跟踪数据库、一个医疗信息数据库和一些 地理信息系统。POSTGRES还被许多大学用 于教学用途。最后,Illustra Information Technologies(后来并入 [Informix ](http://www.informix.com/),而它现在属于 [IBM](http://www.ibm.com/))拿到代码并使之 商业化。在1992年末POSTGRES成为 [Sequoia 2000 scientific computing project](http://meteora.ucsd.edu/s2k/s2k_home.html)的首要数据管理器。 到了1993年,外部用户的数量几乎翻番。随着用户的增加,用于源代 码维护的时间日益增加,以至占用了太多本应该用于数据库研究的时 间,为了减少支持的负担,伯克利的POSTGRES 项目在版本4.2时正式终止。 ## Postgres95 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取代(在服务器端实现)。 (接口库[libpq](#calibre_link-496)是以PostQUEL来命名的。) 在PostgreSQL之前还不支持子查询(见下文),但 这个功能可以在Postgres95里面由用户定义的 SQL函数实现,重新实现了聚集,同时还增加了对 `GROUP BY`查询子句的支持。 * 新增加了利用GNU Readline进 行交互SQL查询的程序(psql)。这个程序很大程度上取代了 老的monitor程序。 * 增加了新的前端库(`libpgtcl`),用以支持 以Tcl为基础的客户端。一个样本shell (`pgtclsh`),提供了新的Tcl命令用于 Tcl程序和Postgres95 后端之间的交互。 * 彻底重写了大对象的接口,将大对象倒转(inversion)作为存储大对象 的唯一机制(去掉了倒转(inversion)文件系统)。 * 去掉了实例级的规则系统,但我们仍然可以通过重写规则来使用规则。 * 在发布的源码中增加了一个简短的常用SQL和 Postgres95特有的SQL特性的教程。 * 用GNU make取代了BSD make用于编译。 Postgres95可以使用不加补丁的 GCC进行编译(修正了偶数字节数据的对齐问题)。 ## PostgreSQL 到了1996年,我们很明显的看出"Postgres95"这个名字已经经不起 时间的考验了。于是我们起了一个新名字PostgreSQL 用于反映最初的POSTGRES和最新的使用SQL的版本之间的关系。同时版本号也重新从6.0开始,将版本号放回到最 初的由伯克利POSTGRES项目开始的顺序中。 许多人出于习惯或者发音简单的原因,将PostgreSQL 称为"Postgres"(现在很少全部用大写字母),这种称法被当做绰号或者别名而广泛接受。 Postgres95版本的开发重点放在识别和理解服务器端 代码中已有的问题上。PostgreSQL开发重点转到了一些 有争议的特性和功能上面,当然各个方面的工作同时都在进行。 自那以来,PostgreSQL发生的变化可以在[Appendix E](#calibre_link-32)里面找到。