PostgreSQL的昨天、今天和明天 
  
自由软件数据库 PostgreSQL 简介 前言 今天,如果人们谈论起计算机操作系统,肯定有非常多的人会津津乐道自由软件操作系统   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的JASEME(?)里面是否还有当年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年,两名伯克利的研究生 
向伯克利里增加了现代的 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.0,具有非常丰富的特性和商业级数据库管理系统的质量。 
而即将到来的 7.1 版本又将是一次飞跃,将向高质量大型数据库管理系统的方向又迈进了一步。 最后,让我告诉您怎么念 PostgreSQL (的确很绕口):Post-gres-Q-L,大概因为大多自由软件开发人员把SQL念做:S-Q-L, 
而不是IBM常说的(squel)。 特点 PostgreSQL 可以说是最富特色的自由数据库管理系统,甚至我们也可以说是最强大的自由软件数据库管理系统。事实上, 
PostgreSQL 的特性覆盖了SQL-2/SQL-92和SQL-3,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中 
有些数据类型可以说连商业数据库都不具备,比如IP类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库, 
很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性的唯一的一种自由软件的 
数据库管理系统。直到最近才有Inprise 的 InterBase 也加入开放源码软件数据库的行列才打破了这个唯一。最后,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 已经完全可以胜任任何中上规模范围内的应用范围的业务。目前有报道的生产数据库的大小已经有20G的数据量,而 
测试库已经超过了60G,已经逼近32位计算的极限。不过学院味也给 PostgreSQL 带来一个意想不到的好处:大概因为各大学的软硬件 
环境差异太大的缘故,它是目前支持平台最多的数据库管理系统的一种,所支持的平台多达十几种,包括不同的系统,不同的硬件体系。 
至今,它仍然保持着支持平台最多的数据库管理系统的称号。 其次,PostgreSQL 的确还欠缺一些比较高端的数据库管理系统需要的特性,比如联机热备份,对大对象的有效支持,以及查询缓冲等 
提高数据库性能的机制等。 最后,PostgreSQL 拥有极其强大的扩展能力,你可以很容易地扩展数据类型,内部函数,聚集,操作符等等,而且,别忘了,你拥有 
所有的源程序,理论上你可以做任何你可以做的事情。 总而言之,PostgreSQL的特性已经完全可以满足绝大部分用户的需要,而且其质量和特性仍然在日新月异地进步着,所以,我们有理由 
相信在不远的将来,PostgreSQL 肯定能够成为一种优秀的,自由的,商业数据库的替代产品。 人物 
对 PostgreSQL 做出巨大贡献的人物太多了,我在这里只能摘其一二而为之, 首先是伯克利,作为一个学院,好象不应该进入人物的范畴,但是如果没有BSD的优良的学术环境,创造出这样优秀的科学技术成果是 
不可能的,只要想想我们的5000多所科研单位就能明白。(我是不是应该在这里还要感谢美国?:-P)。 然后是 Michael Stonebraker 教授,正是这位学究的开明才能让这样优秀的科技成果走向了公众,甚至到了”自由世界的仇敌“的 
我们的手里,而且是所有的东西,不仅仅是一堆二进制文件。 接下来有我们的同胞,Andrew Yu 和 Jolly Chen,他们为 PostgreSQL 走向现代做出了巨大的贡献。 最后是现在正在辛勤耕耘的黑客们,这些黑客以他们执着的精神和高超的技术,为 PostgreSQL 的日益完善做出了不可磨灭的贡献。 
黑客总共有数十人之多,我只好把核心成员挑出来介绍一下,而对于贡献了更多代码的其他重要

解决方案 »

  1.   

    PostgreSQL 中文信息
    http://laser.zhengmai.com.cn/呵呵,我不用PostgreSQL 的,
    所以还需要一个PostgreSQL高手来做版主
      

  2.   

    大力支持。顺便为一句,各位个www.linuxfourm.net吗??
      

  3.   

    又来了。民族情节!!!!不要煽动广大群众。哈哈。。我就喜欢PostgreSQL他小功能全,csdn不应该把它与Mysql放在一起,这是两个档次上东东。对了。那有下windows下的PostgreSQL呀。。我一直是linux上用。:)
      

  4.   

    主要是PostgreSQL在win32 上使用太麻烦:(
    话说回来了。。mysql也是在类unix平台下有优势。。
    不过现在的客户都用win32的机器...没办法阿..
      

  5.   

    如何用USOGRES做数据库热备份
    How to install(怎样安装)
    First, to confirm duplication, start two PostgreSQL in one machine and execute usogres.(首先,要确定复制,在一台机器上启动两个POSTGRESQL 然后执行USOGRES)
    This type setup processes are following.(下面是安装过程)
    And if you want to create a backup of PostgreSQL database in another machine, your work is only rewrite a setup file.(如果你想建一台POSTGRESQL 数据库的备份机器,你的工作仅仅是重写一个配置文件)
    Let's try to install it to confirm a duplication. (我们试试安装一下吧)
    A necessity(第一步,必须品)
    · PostgreSQL which is the condition that it can work.(POSTGRESQL能够正常动作 )
    · The source code of Usogres.  You can get here.(USOGRES的源文件) 
    · A set of database which you want to duplicate. (你想要复制的数据库)
    · development tools(c++ compiler is indispensable.) (开发工具,C++编译器是不可少的)
    Setup process<第二,安装过程>
    · Confirm that a development tool such as c++ is gathered. <开发工具,C++编译器已经安装好了>
    · PostgreSQL is made the condition that it can work.  Refer to this page for the introduction of PostgreSQL. (POSTGRESQL能够正常动作)
    Now, this linked page is english. (Thanks lot! Sebastien Paviot). 
    · You should get the source code of usogres.  Stable version is here. 
    · A taken source code should be set in the suitable place,  and type below (取得的源文件放在一个适当的位置,然后输入:)
    tar xzf usogres-0.0.x.tar.gz
    If you are using Slackware and expanding bz2 file, use 'tar xyf 
    usogres-0.0.x.tar.bz2' (如果你用Slackware and expanding bz2 文件你的命令是: 'tar xyf usogres-0.0.x.tar.bz2')
    · Change directory to the directory where the source codes are expanded. (进入你的源文件解压后的目录输入:./configure …..)
    · type 
    · ./configure
    · make
    su -c "make install"
    When you type above, then executable file was installed in name /usr/local/bin/usogres. (当你执行完上面的命令后,可执行文件就安装在/usr/local/bin/usogres这个目录)
    · You should create the setup file for usogres in the home directory of the user who execute usogres.(你要建立配置文件到可执行USOGRES人的主目录,配置文件的名称是:.usogresrc)
    The name of the setup file is '.usogresrc'.
    The file of the sample is shown here.(配置文件内容大致如下:)
    · host = "127.0.0.1"
    · port = 5432
    · hostorg = "127.0.0.1"
    · portorg = 5434
    · hostcopy = "127.0.0.1"
    portcopy = 5436
    The contents of setup file are as the following. (配置文件内容大致如下:)
    o host : The host address where usogres stands by.( usogres的安装主机IP) 
    o port : The port number where usogres stands by. (usogres的安装主机的端口号)
    o hostorg : The host address that a main PostgreSQL stands by.( PostgreSQL的主要数据库的主机IP) 
    o portorg : The port number that a main PostgreSQL stands by. ( PostgreSQL的主要数据库的主机端口)
    o hostcopy : The host address that a sub PostgreSQL stands by. ( PostgreSQL的次要数据库的主机IP)  
    o portcopy : The port number that a sub PostgreSQL stands by. ( PostgreSQL的次要数据库的主机端口)
    · The compulsion of the database synchronizes.(强制数据库同步)
    If you done a process to show here, the contents of the sub database are completely destroyed.(如果你执行下面的动作,数据库的潜在容量将全被破坏)
    Do work after you surely take a backup. (最好是你 先备份一下)
    o Stop a main database.(用 pg_ctl 的 kill 命令停止所有的数据库) 
    o Stop a sub database, too.(If you excuted second postmaster) 
    o The data directory of /usr/local/pgsql/data(of the main database) and the sub database is described in the following as /usr/local/pgsql/data2 . (主要数据库的目录是’ /usr/local/pgsql/data’,备份数据库的目录是’ /usr/local/pgsql/data2’)
    o If /usr/local/pgsql/data2 doesn't exist, it is made as 'mkdir /usr/local/pgsql/data2'. (如果备份数据库的目录不存在则用MKDIR建立)
    o Change directory to /usr/local/pgsql/data, and the following command you should execute, then the main database and sub database are made the same contents forcibly.(进入目录’ /usr/local/pgsql/data’,你要执行下面的命令,这时主要的和备份的数据库容量将是一样大)
    tar cf - . | (cd ../data2; tar xf -)
    A little more easily when you using a GNU tar(如果你用早期的GNU TAR 就是下面的)
    tar cf - . | tar xf - -C ../data2 
    · Start the main postmaster. It is the setup shown here, because it stands by in the port of 5434 (启动主要数据库,它的配置有所改变,端口为5434,命令如下:)
    su pgsql -c "/usr/local/pgsql/bin/postmaster -S -i -p 5434 -D /usr/local/pgsql/data"
    · Start sub postmaster. It is the setup shown here, because it stands by in the port of 5436 (启动备份数据库,它的配置有所改变,端口为5436,命令如下:)
    su pgsql -c "/usr/local/pgsql/bin/postmaster -S -i -p 5436 -D /usr/local/pgsql/data2"
    · Start usogres. It is never especially difficult. (启动USOGRES,它没有什么特别的地方)
    /usr/local/bin/usogres
    It is all right as the above if it just starts without an option.  Usogres uses setup file for his execution. (就是上面这样了,启动时不带OPTION 参数)
    · For the client setup, two environment variable should setup below. (客户端的设置:pghost,和pgport 是usogres 所在的机器和端口)
    o PGHOST : Host name that usogres to stand by. 
    o PGPORT : Port address that usogres to stand by. The example of bash and the example of csh are shown. (下面是csh应用的列子)
    o bash
    o export PGHOST=localhost
    export PGPORT=5432
    o csh
    o setenv PGHOST localhost
    setenv PGPORT 5432
    Two databases and usogres started in the above.
    Try variously by using the psql command and so on.
    (现在OK了,用不同的命令试试吧!)