今天,如果人们谈论起计算机操作系统,肯定有非常多的人会津津乐道自由软件操作系统Linux,毕竟,众人拾 柴火焰高, 如今没有任何人敢于忽视 Linux 这个自由软件操作系统在我们星球的存在,就连国内比较特殊的 环境下,也不断地有 各种各样的 Linux 秀出现让公众,甚至是那些对计算机知之甚少的群众都能意识到 Linux 的存在。但是,如果我们 说起数据库,可能绝大多数人只会记得有 Oracle,IBM DB2,Informix,Sybase,MS sql Server,以及在互联网广为 使用的轻量级 MysqL,而提到 Postgresql 的名 字,可能很多人都会皱起眉毛:“这是什么?” “Postgresql” 是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),它的很多特性 正是当今许多商业数据库的前身。 出身名门 说起Postgresql,我们不得不谈 Berkeley,也就是中文中的“加州大学伯克利分校”这所大名鼎鼎的大学。 老实说,伯克利(BSD)对计算机科学的贡献可谓巨大,在整个计算机科学的发展史上,几乎到处都有这所学 校的研究人员和学生的足迹。只要稍微对计算机技术史有些记忆的人都会记得在 Unix 操作系统的发展里程碑 上 BSD 这三个字的分量,然而也许正是由于 BSD 在系统和网络领域里的光芒太耀眼,掩盖了 BSD 对计算机技 术其他分支的贡献,而Postgresql 正是其中之一。 追本溯源地讲,Postgresql 最早开始于 BSD 的 Ingres 项目,这个项目主要是研究关系型数据库技术, 早在 1970 年 E.F. Codd 就提出了关系模型,从那以后,人类在计算机领域的数据管理就进入了一个新的时期 。从此人们开始用抽象的关系语句来描述自己的 数据,大大提高了人类对数据的抽象描述能力。而 Ingres 项 目正是就此进行研究的,它始于 1977 年,到 1985 年结束,而其研究成果后来被一家叫 Relational Technologies 的商业公司拿去做成了商品软件,后来这家公司又被 Computer Associates(CA)收购,不知道 CA 的 JASMINE里面是否还有当年 Ingres 的影子? 新项目 Postgres 然后,从1986年开始,BSD 的 Michael Stonebraker 教授领导了称为 Postgres 的“后Ingres”项目, 其 主要目的是数据库管理系统的更高级研究,因此而产生了 Postgresql 的直接前身,Postgres,而 Postgresql 的名字也是从 Postgres 项目继承过来的。 这个项目的成果是非常巨大的,在现代数据库的许多方面都做出的 大量的贡献,比如,面向对象的数据库, 部分索引技术,规则,过程和数据库扩展等方面都走在了数据库管理 系统的前列。而且,Stonebraker 教授还做出了一件造福全人类的事情, 那就是把 Postgres 放在了 BSD 版 权的保护下,在这个版权的范围里,任何人几乎可以做任何事情,包括增强它和商业化等。条件只是把 BSD 的 版权声明包括在软件的源程序里。 Postgres 在 1989 年发布了第一个版本,因为是BSD版权,所以很快在各种研究机构和一些公众服务组织 里广泛使用起来, 由于 众多用户使 Postgres 的开发变得更多地是维护代码和打补丁,而日益背离了原先的 数据库管理系统的研究的目标, 到了1994年 Postgres 在版本 4.2 的时候正式终止。而 Postgres 的许多成 果则转化成一个商业公司 Illustra,后来 Illustra 被 Informix 收购。看到这里,想必大家应该对 Postgres 的影响有一些认识了吧。 炎黄子孙的贡献 Postgres95 Postgres 并没有因为 Postgres 项目的终止而停止发展,而是获得了一次新生:在1994年,两名伯克利的 研究生在做研究生课题的时候, 向 Postgres 里增加了现代的 sql 语言的支持。请不要奇怪,sql 的祖宗是 E.F. Codd 的关系模型,但是 sql 作为语言,一直到1992年 才形成真正的国际标准(还是草案),当时称为 sql2,但是人们常称为 sql92。而在那之前,所以查询语言都是由不同的数据库管理系统 自己实现的,比如, 在 Postgres 里原来是用叫 Postquel 的查询语言;这两位研究生是 Andrew Yu 和 Jolly Chen,看了名字, 大家可能会想:“很象中国人的名字嘛”,没错,他们就是黑头发黄皮肤的炎黄子孙,不过很可惜的是他们并没 有在中国的(包括台湾省的)xx大学取得这样的成就。这样,Postgres 迎来了 1995年,大概 是受xxxxxxx95 的命名方法的“启发”吧,他们俩把这个版本的 Postgres 命名为 Postgres95,并且继续发布了几个版本,增强 了一些特性。 国际化 Postgresql 到了 1996 年,Andrew Yu 和 Jolly Chen 相继离开 Postgres95 的开发队伍,(Andrew Yu 加入了 Informix, Jolly Chen 继续读书),而在一些自由软件黑客(注1)的发起下,Postgres 项目又开始了新的 历程,最先是由几位加拿大黑客发起,开始了 Postgresql 项目,后来参与的人越来越多,逐渐成为了一个由 近20个国家的近四十名黑客组成的团体共同开发的 自由软件项目。Postgresql 重新把版本号放到了原先 Postgres 项目的顺序中去,从 6.0 开 始(Postgres 本身到4.2,Postgres95 算5.0)。经过五年多的协作开 发,Postgresql 可以说是目前世界上最先进,功能最强大的自由软件的数据库管理系统。 目前,Postgresql 的稳定版本到了 7.3,具有非常丰富的特性和商业级数据库管理系统的质量。而即将到 来的 7.4 版本又将是一次飞跃, 将向高质量大型数据库管理系统的方向又迈进了一步。 在这里,先让我告诉您怎么念 Postgresql (的确很绕口):Post-gres-Q-L,大概因为大多自由软件开发 人员把 sql 念做:S-Q-L,而不是 IBM 常说的(squel)。 特点 Postgresql 可以说是最富特色的自由数据库管理系统,甚至我们也可以说是最强大的自由软件数据库管理 系统。事实上, Postgresql 的特性覆盖了 sql-2/sql-92 和 sql-3/sql-99,首先,它包括了可以说是目前世 界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等 ;其次,Postgresql 是全功能的自由软件数据库,很长时间以来,Postgresql 是唯一支持事务、子查询、多 版本并行控制系统、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。直到最近才有 Inprise 的 InterBase 以及 SAP 等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。最后,Postgresql 拥有一支非常活跃的开发队伍,目前的提交人员已经超过三十人, 而且在许多黑客的努力下,Postgresql 的 质量日益提高,也从另外一个侧面上增加了人们使用 Postgresql 的信心,毕竟数据库管理系统不能象桌面操 作系统那样 一天宕一次还让人觉得挺满意 :-P。 从技术角度来讲,Postgresql 采用的是比较经典的 C/S (client/server)结构,也就是一个客户端对应一个 服务器端守护进程的模式, 这个守护进程分析客户端来的查询请求,生成规划树,进行数据检索并最终把结果 格式化输出后返回给客户端。为了便于客户端的程序的编写, 由数据库服务器提供了统一的客户端 C 接口。 而不同的客户端接口都是源自这个 C 接口,比如 ODBC,JDBC,Python,Perl ,Tcl,C/C++,Esql 等, 同时 也要指出的是,Postgresql 对接口的支持也是非常丰富的,几乎支持所有类型的数据库客户端接口。这一点也 可以说是 Postgresql 一大优点。 说完优点,不能不说几句缺点,不能因为是自由软件而偏袒 Postgresql,从 Postgres 开始,Postgresql 就经受了多次变化。 首先,早期的 Postgresql 继承了几乎所有 Ingres,Postgres,Postgres95 的问题:过于学院味,因为 首先它的目的是数据库研究,因此不论在稳定性, 性能还是使用方便方面,长期以来一直没有得到重视,直到 Postgresql 项目开始以后,情况才越来越好,目前,Postgresql 已经完全可以胜任任何中上规模范围内的应 用范围的业务。目前有报道的生产数据库的大小已经有 TB 级的数据量,已经逼近 32 位计算的极限。 不过学 院味也给 Postgresql 带来一个意想不到的好处:大概因为各大学的软硬件环境差异太大的缘故,它是目前支 持平台最多的数据库管理系统的一种, 所支持的平台多达十几种,包括不同的系统,不同的硬件体系。至今, 它仍然保持着支持平台最多的数据库管理系统的称号。 其次,Postgresql 的确还欠缺一些比较高端的数据库管理系统需要的特性,比如联机热备份,数据库集群 ,更优良的管理工具和更加自动化的系统优化功能 等提高数据库性能的机制等。 但是,话说回来,Postgresql 拥有极其强大的扩展能力,你可以很容易地扩展数据类型,内部函数,聚集,操 作符等等,而且,别忘了,你拥有所有的源程序, 理论上你可以做任何你可以做的事情。因此,很多缺点,在 转瞬之间就会消失也是很正常的。 总而言之,Postgresql的特性已经完全可以满足绝大部分用户的需要,而且其质量和特性仍然在日新月异 地进步着,所以, 我们有理由相信在不远的将来,Postgresql 肯定能够成为一种优秀的,自由的,商业数据 库的替代产品。 未来的前景 就目前而言, Postgresql 的前景非常好,目前的稳定版本是 7.3,这个版本在 7.2 版本的基础上再次做 了大量的改进和提高。 7.1 是继 6.5 之后的又一个巨大的变化,她首先引入了预写式日志的功能。这样,事务就拥有了完善的日 志机制,可以提供更好的性能, 以及还可以实现更优良的备份和灾难恢复的能力(比如联机热备份和宕机后的 自动恢复)。其次是对文本类型的数据段的长度不再限制, 从而很大程度上解决了 Postgresql 的大对象的问 题。尤其在如今的 web 应用盛行的环境下,这个功能几乎立即将 Postgresql 摆到了 可以与其他所有类型的 数据库竞争的地位。而且在 sql 标准上又有进一步的提高,比如 OUTER JOIN 的支持等等。 7.2 版本在 7.1 的基础上改进了原来的数据库定期清理工作中排它锁的过程,使数据库维护不再影响数据 库的正常使用,同时增强了查询优化的智能, 使数据库对索引的使用更加准确;同时还消除了每个安装节点的 免维护事务次数的限制;国际化;以及还有大量其他方面的增强。 7.3 版本在 7.2 版本的基础上,继续增强了许多特性,包括可返回结果集的用户函数,模式(schema)的 支持,准备好的查询规划,DROP COLUMN 的支持, 以及vacuum的优化,更好的查询计划器,更好的权限管理系 统等。7.3 版本在许多现实项目中得到了充分的证明和大量的应用。标志着 Postgresql 正式成为主流数据库 产品之一。 在未来的 7.4 版本中,我们有望可以看到索引空间的重复利用,优化了的 IN 子句(大家不用为 IN 恶劣 的性能发愁了),新的前后端协议,更优的聚集函数。 甚至还可能提供 windows 的本机移植版本和具有相当 的热备份功能的 PITR (即时恢复)和很多人期待已久的表空间的功能。可以说 7.4 将是一个完全胜任 7x24 应用需求的真正的高端数据库,一个具有开拓企业级应用的数据库。我们有什么理由不欢呼呢? 总结 作为一种数据库管理系统,Postgresql 并不象 Linux 与某些商业操作系统相比那样,得到迅速广泛的承 认,这一点是可以理解的,Tom Lan 曾经有一段话说得实在: “首先,商业数据库系统不象某些商业操作系统 那样实在太烂,相反,商业数据库系统的质量还是非常高的,与之相比,Postgresql 仍然有一定差距”但同时 他也相信 “我们已经达到商业级的数据库系统的质量......” 的确,自由软件的发展具有跳跃性,因为开发者大多是利用空余时间进行开发,当开发者云集的时候,新 的东西可能一下子就增加上去;而如果在自由软件运动的低潮时, 因为缺少开发人员,所以可能会有一长段时 间的沉寂,而后又会随着社会的发展而出现新的活动。也就是一种螺旋的上升。 因而,我们在面对自由软件的时候,一定要有一点:要相信自己和依靠自己,因为自由软件的发展的确需 要每一个爱好者充分发挥自己的聪明才智, 同时,也只有自由软件给你提供了这样的机会——依靠自己的力量改 变自己的命运。最后,也只有这样,自由软件之光才能真正照耀我们的世界。