QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 886|回复: 1

[最强悍的开源数据库管理系统]

[复制链接]
发表于 2003-11-22 13:01:38 | 显示全部楼层 |阅读模式
PostgreSQL

介绍。摘自 http://www.pgsqldb.org/。暂时不允许再转载。

   PostgreSQL 是一种非常复杂的对象-关系型数据库管理系统(ORDBMS), 也是目前功能最强大,特性最丰富和最复杂的自由软件数据库系统。有些特性甚至连商业数据库都不具备。

    这个起源于伯克利(BSD)的数据库研究计划目前已经衍生成一项国际开发项目, 并且有非常广泛的用户。

    请参看本站主要成员何伟平(BITBIRD)的文章“PostgreSQL的昨天、今天和明天—自由软件数据库PostgreSQL简介”。



PostgreSQL 的昨天今天和明天
                                              --自由软件数据库 PostgreSQL 简介 v2.0


前言

今天,如果人们谈论起计算机操作系统,肯定有非常多的人会津津乐道自由软件操作系统Linux,毕竟,众人拾柴火焰高, 如今没有任何人敢于忽视 Linux 这个自由软件操作系统在我们星球的存在,就连国内比较特殊的环境下,也不断地有 各种各样的 Linux 秀出现让公众,甚至是那些对计算机知之甚少的群众都能意识到 Linux 的存在。但是,如果我们 说起数据库,可能绝大多数人只会记得有 Oracle,IBM DB2,Informix,Sybase,MS SQL Server,以及在互联网广为 使用的轻量级 Mysql,而提到 PostgreSQL 的名字,可能很多人都会皱起眉毛:“这是什么?”

“PostgreSQL 是一种特性非常齐全的自由软件的对象-关系性数据库管理系统(ORDBMS),它的很多特性正是当今许多商业数据库的前身”
--摘自 PostgreSQL 手册。

为了让大家能够清楚的了解 PostgreSQL,请听我细细道来。

历史

出身名门

谈到 PostgreSQL,我们不得不谈 Berkeley,也就是中文中的“加州大学伯克利分校”这所大名鼎鼎的大学。 老实说,伯克利(BSD)对计算机科学的贡献可谓巨大,在整个计算机科学的发展史上,几乎到处都有这所学 校的研究人员和学生的足迹。只要稍微对计算机技术史有些记忆的人都会记得在 Unix 操作系统的发展里程碑 上 BSD 这三个字的分量,然而也许正是由于 BSD 在系统和网络领域里的光芒太耀眼,掩盖了 BSD 对计算机技术其他分支的贡献,而
PostgreSQL 正是其中之一。

创世纪——Ingres

追本溯源地讲,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 做出巨大贡献的人物太多了,我在这里只能摘其一二而为之,

首先是伯克利,作为一个学院,好象不应该进入人物的范畴,但是如果没有 BSD 的优良的学术环境,创造出这样优秀的科学技术成果是不可能的, 只要想想我们的 5000 多所科研单位就能明白。(我是不是应该还要在这里感谢美国?:-P)。

然后是 Michael Stonebraker 教授,正是这位学究的开明才能让这样优秀的科技成果走向了公众,甚至到了“自由的对立面”的我们的手里, 而且是所有的东西,不仅仅是一堆二进制文件。

接下来有我们的同胞,Andrew Yu 和 Jolly Chen,他们为 PostgreSQL 走向现代做出了巨大的贡献。

最后是现在正在辛勤耕耘的黑客们,这些黑客以他们执着的精神和高超的技术,为 PostgreSQL的日益完善做出了不可磨灭的贡献。 黑客总共有数十人之多,我只好把核心成员挑出来介绍一下,而对于贡献了更多代码的其他重要黑客,只好暂且委屈他们一阵子了,如果有机会,我还会进一步介绍他们。

Tom Lane:一位卡耐基梅隆大学(CMU)的电子工程学 ph.D(博士),是 PostgreSQL 的非常重要开发人员,其足迹遍部 PostgreSQL 的每一个角落, 可以说对 PostgreSQL 的性能和稳定性以及特性的取舍有极其重要的贡献,在开始参加 PostgreSQL 项目之前,他已经有了十余年的自由软件开发经验, 可以说是老牌的自由软件程序员;

Vadim Mikheev:一位来自俄国的黑客,其特点是专干大项目,比如 V6.3 里面的子查询,V6.5里面的多版本并行控制,以及 7.1 里面的预写式日志系统等, 可以说是 PostgreSQL 的开拓者;

Jan Wieck:一位来自德国的黑客,有十余年的数据库开发经验,原先曾经为 SAP 等大型软件厂商工作,后来加入 PostgreSQL 的开发;他也是喜欢大项目, 不过兴趣是用户端的特性,比如外键,一些过程语言比如 pl/pgsql 等,7.1 版本中的 CLOB(文本大对象)的部分也是他的作品。

Thmas Lockhart:一位毕业于加洲理工学院的美国黑客,主要负责文档和若干种数据类型(尤其是与时间相关的类型),SQL 语法的标准一致性,时间类型,以及完整性约束等。

Bruce Monjian:来自美国,是一些文档和项目协调,以及许多完整性约束和 SQL 语法的标准等,比如 OUTER JOIN,同时维护 TODO 列表和 FAQ。

Marc Fournier:加拿大黑客,主要的协调人,维护站点,邮件列表,以及发布版本等。

Peter Eisentraut:德国/瑞典黑客,主要负责文档编写、完善,认证和权限管理,制作脚本和一些管理配置接口的制定,以及客户端交互工具 psql 等, 其作用日益突出,可以说在 7.2 版本的开发过程中是不可或缺的人物。

另外还有大量来自欧洲,澳洲和亚洲(日本)等地的黑客。实际上,有越来越多的黑客的作用变得日益重要,在邮递列表中每天都有来自不同黑客的 各种各样的补丁程序。所以,自由软件的特点就是,只要愿意,任何人都可以对它有足够的影响。也就是说,我们命运是真正掌握在自己手里的。

展望

就目前而言, 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 仍然有一定差距”但同时他也相信 “我们已经达到商业级的数据库系统的质量......”

的确,自由软件的发展具有跳跃性,因为开发者大多是利用空余时间进行开发,当开发者云集的时候,新的东西可能一下子就增加上去;而如果在自由软件运动的低潮时, 因为缺少开发人员,所以可能会有一长段时间的沉寂,而后又会随着社会的发展而出现新的活动。也就是一种螺旋的上升。

因而,我们在面对自由软件的时候,一定要有一点:要相信自己和依靠自己,因为自由软件的发展的确需要每一个爱好者充分发挥自己的聪明才智, 同时,也只有自由软件给你提供了这样的机会——依靠自己的力量改变自己的命运。最后,也只有这样,自由软件之光才能真正照耀我们的世界。

附录
参考资料
历史
http://www.daemonnews.org/199907/devhistory.html
http://www.postgresql.org/osdn/history.pdf
http://www.postgresql.org/osdn/tour.pdf
特性
http://www.postgresql.org/idocs/
http://www.pgsqldb.com/pgsqldoc-7.2c/index.html


注:
1,本文中黑客一词源于英文 Hacker,是指那些计算机尖子,对计算机及全人类都有贡献的创造者, 不是一般媒体上的“黑客”概念,那是指 Cracker,也就是破坏者。   

 

作者:何伟平 [email protected]      [email protected]  
注:如要转载请注明作者和出处 www.pgsqldb.org 或 laser.zhengmai.com.cn
 楼主| 发表于 2003-11-22 13:03:41 | 显示全部楼层

[安装与初始化]上手教程(一)

下面是我安装和初步试用PostgreSQL的经历,集中在这里。除本文所提到的链接以外,本文允许以非商业目的任意转载,但是必须确保内容完整。

我下载了PostgreSQL7.3.4,是源代码,保存为“/opt/lin_app02/tmp/download/PostgreSQL/R1/postgresql-7.3.4.tar.gz”。下载后,我在这个目录下开了终端(rxvt),执行命令:
[code:1]
[root@TFW-RFL40F R1]# tar zxvfp ./postgresql-7.3.4.tar.gz
[/code:1]
得到一个目录“postgresql-7.3.4”。
[code:1]
[root@TFW-RFL40F R1]# cd postgresql-7.3.4
[root@TFW-RFL40F postgresql-7.3.4]# ./configure --prefix=/opt/lin_app01/postgres --enable-locale --enable-multibyte --with-perl --with-odbc --with-tcl
[/code:1]
......
对上面一步的说明:
./configure
configure不加任何选项,系统将按默认的设置安装postgresql,查看configre的相关选项可以使用:configure -help

一些最常用的如下:

--prefix=BASEDIR
为安装 PostgreSQL 选择一个不同的基础路径。缺省是 /usr/local/pgsql。

--enable-locale
如果你想用本地化支持。

--enable-multibyte
允许使用多字节字符编码。这个选项主要用于象日语,韩语或中文这样的语言。

--with-perl
添加 Perl 模块接口。请注意 Perl 接口将安装到 Perl 模块的常用位置(典型的是在 /usr/lib/perl),所以要成功使用这个选项,你必须有 root 权限。

--with-odbc
制作 ODBC 驱动包。

--with-tcl
制作 Tcl/Tk 需要的接口库和程序,包括 libpgtcl,pgtclsh,和 pgtksh。

这些编译参数告诉编译器如何编译PostgreSQL:
[code:1]
[root@TFW-RFL40F postgresql-7.3.4]# make
[/code:1]
......
[code:1]
[root@TFW-RFL40F postgresql-7.3.4]# make install
[/code:1]
......
中间不报错的话,安装就完成了,然后弄一个存放数据库文件的目录:
[code:1]
[root@TFW-RFL40F postgresql-7.3.4]# mkdir /opt/lin_app01/postgre-data
[/code:1]

下面要设置环境变量。由于安全原因,PostgreSQL是不让“root”等特权用户用的。为了方便,我就用日常工作的“TFW”身份管理PostgreSQL,但是建议大家为管理PostgreSQL新创建一个用户。为了方便,我直接修改了“/etc/profile”,但是建议修改个人主目录下的“.bash_profile”。

我在环境变量文件里添加了如下内容:
[code:1]
########################################
#        PostgreSQL
LD_LIBRARY_PATH=/opt/lin_app01/postgres/lib
export LD_LIBRARY_PATH
PGLIB=/opt/lin_app01/postgres/lib
PGDATA=/opt/lin_app01/postgre-data
PATH=$PATH:/opt/lin_app01/postgres/bin
MANPATH=$MANPATH:/opt/lin_app01/postgres/man
export PGLIB PGDATA PATH MANPATH
########################################
[/code:1]
看着挺麻烦,其实就是下面的格式:
LD_LIBRARY_PATH=<--prefix所指的地方>/lib
export LD_LIBRARY_PATH
PGLIB=<--prefix所指的地方>/lib
PGDATA=<你放数据库文件的地方>
PATH=$PATH:<--prefix所指的地方>/bin
MANPATH=$MANPATH:<--prefix所指的地方>/man
export PGLIB PGDATA PATH MANPATH

刚才提到的那些目录都是在“root”身份下创建的,要让它们能为“TFW”所用,还得改权限:
[code:1]
[root@TFW-RFL40F postgresql-7.3.4]# chown -R TFW.TFW /opt/lin_app01/postgre*
[/code:1]
即:
chown -R <PostgreSQL管理员所在组>.<PostgreSQL管理员用户名> <--prefix所指的地方>
chown -R <PostgreSQL管理员所在组>.<PostgreSQL管理员用户名> <你放数据库文件的地方>

然后我关闭了X,并注销,再重新登录,以使环境变量生效。

[code:1]
[TFW@TFW-RFL40F TFW]$ initdb
[/code:1]
这个命令用来初始化PostgreSQL。请确保执行前你放数据库文件的地方是空的。

[code:1]
[TFW@TFW-RFL40F TFW]$ postmaster -i -D ./postgre-data/&
[/code:1]
postmaster -i -D <database-path>&
......
这是开始数据库系统的服务。后面那个“&”最好带上,否则,......:-D

[code:1]
[TFW@TFW-RFL40F TFW]$ createdb pro_test_1
[/code:1]
我用这个命令创建了PostgreSQL下上午第一个数据库。

关闭服务的命令和更多操作方法我还没学到,所以就用杀进程的办法来关服务了。

注意:PostgreSQL管理员最好从“Login:”、xdm或kdm登录系统,因为如果“su”过去操作将不能正常执行。

和大家共同进步。下面是我参考的帖子:
http://www.freelamp.com/new/publish/1012414614/index_html
http://chinaunix.net/jh/18/546.html
http://chinaunix.net/jh/18/548.html
我四处查找链接里所说的“egcs-c++”,也没下载到,后来才知道“egcs-c++”已经被整合进高版本的“gcc”里了。我的“gcc”是3.2的。大家的“gcc”如果高于2.8,也就不要再到处找“egcs-c++”了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-15 15:49 , Processed in 0.048249 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表