现在是时候告诉你到底Postgresql是什么了。它是一个包含关系模型和支持sql标准查询语言的DBMS(数据库管理系统)。
Postgresql也非常先进和可靠,并且性能非常高。它基本上可以在任何UNIX平台上运行,包含类UNIX系统,比如FreeBSD、Linux和Mac OS X。它也可以在Microsoft Windows NT/2000/2003服务器版本上运行,甚至可以在Windows XP上进行开发。并且,就像本章开始提及的,它免费且开源。
Postgresql可以与其他DBMS媲美。它基本上包含其他所有商业的或开源的数据库中你能找到的功能,甚至一些你找不到的功能。
Postgresql 包含以下功能(在Postgresql FAQ里面列出的):
l 事务
l 子查询
l 视图
l 外键参照完整性
l 复杂的锁
l 继承
l 规则
l 多版本并发控制
从版本6.5开始,Postgresql就非常的稳定,这通过针对每个发布版本都通过大量的回归测试得以保证。7.x发布版比以前版本更接近sql92标准,并去掉了令人讨厌的行数限制。
本书中使用的Postgresql,8.x版本,增加了以下新功能:
l Microsoft Windows原生支持
l 表空间
l 可以修改列类型
l 时间点恢复
Postgresql被证实在使用中非常可靠。每次发布都被严格控制,BETA都经过至少一个月的测试。通过庞大的用户社区和普及的源码访问,BUGs很快就被修复了。
Postgresql的性能在每次发布都有提升,最新的基准测试显示在某些条件下,它可以同商业产品相媲美。一些非全功能的数据库系统性能会比它高出一些,因为这些数据库在没有全功能带来的性能损耗。当然,对于足够简单的应用,可以使用扁平文件的数据库系!
Postgresql历史简介
Postgresql可以回溯它的家族树到1977年的加州大学伯克利分校(University of California at Berkeley,UCB)。一个叫做Ingres的关系数据库由UCB在1977到1985年开发。Ingres是一个著名的UCB产出,在很多学院和研究团体的UNIX计算机上崭露头角。为了服务于商业市场,Ingres的源码由Relational Technologies/Ingres公司加以改良并成为第一个商用RDBMS。
注:今天,Ingres已经变成了CA-INGRES II,一个Computer Associates公司的产品。它最近也变成了开源产品。
同时,在UCB,从1986到1994年,一个名叫Postgres的关系数据库服务器被继续开发。同样,这份代码被Illustra公司拿去发展成一个商业化的产品(Illustra 公司后来被 Informix 公司并购,程序则整合到 Informix的 Universal Server 去了)。在1994年,Postgres被添加了sql功能,且被易名为Postgres95。
到1996年,Postgres开始变得非常流行,开发人员决定开放它的开发到一个邮件列表,成功的实现了志愿者驱动的Postgres发展。这时候,Postgres经历了它的最后一次更名,替换“95”标记为更恰当的“sql”,反映出它现在支持的查询语言标准。Postgresql诞生了。
现在,一个因特网上的开发团队使用其他开源软件像Perl,Apache和PHP的同样的方法开发着Postgresql。用户可以访问源码并贡献修复代码、增强功能和建议新功能。Postgresql的官方发布网站为http://www.postgresql.org。
已经有很多公司提供商业支持了。例如EnterpriseDB公司,期网站地址为:http://www.enterprisedb.com。
Postgresql架构
Postgresql强壮的一个原因源于它的架构。和商业数据库一样,Postgresql可以用于C/S(客户/服务器)环境。这对于用户和开发人员有很多好处。
Postgresql安装核心是数据库服务端进程。它允许在一个独立服务器上。需要访问存储在数据库中的数据的应用程序必须通过数据库进程。这些客户端程序无法直接访问数据,即使它们和服务程序在同一台机器上。
注:Postgresql还不具有一些企业级商业数据库的负载均衡和提供扩展的可伸缩性和可恢复性的HA(High-Availability,高可用性)功能。在http://gborg.postgresql.org有一些Postgresql认可的项目针对增加这些功能在进行中,同时也有一些商业解决方案存在。
这种分开为客户端和服务器端的方式可以让应用程序分布式允许。你可以使用网络来分隔你的客户端和服务端,使开发的客户端程序适合用户的使用环境。例如,你可以在UNIX上实现数据库并建立运行在在Microsoft Windows上的客户端程序。图1-3显示一个典型的分布式Postgresql应用。
图1-3 Postgresql 架构
在途1-3中,你可以看到几个客户端通过网络连接到服务器。对于Postgresql,这需要是一个TCP/IP网络——一个局域网(local area network,LAN)或者甚至是因特网。客户端连接到数据库主进程(在图1-3中叫做postmaster),主进程为这个客户端的访问请求专门建立一个新的服务端进程提供服务。
服务器专注于数据处理,而不是尝试控制很多客户端访问服务器上共享目录中存储的数据,这让Postgresql高效的管理数据的完整性,即使在存在大量的用户的情况下。
客户端程序使用专有协议连接到Postgresql。然而,通过在客户端安装软件而为应用程序提供一个标准的接口是可能的,例如开放式数据库连接(ODBC,Open Database Connectivity)标准或者Java程序的Java数据库连接(JDBC)标准。ODBC驱动的存在运行很现存的应用程序使用Postgresql作为一个数据库,包括的微软的Office产品例如Excel和Access。你将在第三、第五和第十三到十八章了解不同的Postgresql连接方法。
Postgresql的C/S架构允许任务分工。非常适合于存储和访问大量数据的服务器主机可以用作安全的数据储存库。可以为客户端开发复杂的图形界面程序。另外,基于网页的前端可以通过建立网页模式的结果集到浏览器访问数据,而不需要另外的客户端软件。我们将在第五章和十五章回头讨论这些想法。
通过Postgresql访问数据
通过Postgresql,你可以通过好几种方法访问你的数据:
l 通过命令行程序执行sql。本书自始至终都会用到这种方法。
l 直接嵌入sql到你的应用程序(使用嵌入式sql)。我们将在14章讨论怎样在C程序中使用它。
l 大量不同的程序语言使用功能调用(APIs)准备和执行sql,扫描结果集以及执行更新。13章将覆盖Postgresql的C语言API。
l 通过ODBC(参考第3章)或者JDBC(参考17章)标准的驱动间接访问Postgresql数据库,或者使用标准库,例如Perl的DBI库(参考16章)。
什么是开源?
21世纪开始的时候,开源软件提供了大量的东西,Postgresql就是一个很好的例子。但是开源到底意味着什么呢?开源的条款在施加到软件上时有非常明确的意义。这意味着软件在提供的时候,同时提供了源码。这并不意味着没有其他条件被施加到软件的使用上。在某些情况下使用(开源)软件,一样需要得到许可。
开源许可赋予你使用、修改和重新发布它而不需要付许可费用的权力。这意味着你可以在你的机构中觉得合适的地方使用Postgresql。
如果你的开源软件有一些问题,因为你有源码,你既可以自己修复它,也可以将代码交给别人来帮忙修复。有很多商业公司提供对开源软件的支持,所以如果你选择使用开源产品,你不必感到被忽视。
有很多种开源许可的变种,一些比其他的更自由。但所有的都支持提供源码和允许重新发布。
最自由的是BSD软件许可(Berkeley Software Distribution),它提供“随便你怎么处置这个软件。”
最宽容的许可是伯克利软件分发(BSD,Berkeley Software Distribution)许可,它实际上说“用这个软件做任何你想做的。但不提供任何担保”。Postresql使用的软件许可(http://www.postgresql.org/about/licence)响应BSD软件许可的精神并套用它的说法,“允许以任何目的使用、拷贝、修改和重新发布这套软件以及文档,不需要任何费用,不需要签订任何书面协议,提供以上的版权通告以及这段和以下两个段落的文字在所有的拷贝中”。紧接着的段落时免责声明和保证书。
相关资源
有很多关于数据库的以及关于Postgresql的进一步信息的印刷的和在线资源。
对于更对的关于数据库的理论,可以查看位于http://www.frick-cpa.com/ss7/default.htm的David Frick的网站的数据库理论的章节。
Postgresql的官方网站位于http://www.postgresql.org,在这里你可以找到更多的关于Postgresql的历史,下载Postgresql的拷贝,浏览官方文档以及更多的东西(包括学习怎样发布Postgresql)。
Postgresql也是Red Hat Database的基础,也就是Postgresql- Red Hat版。你可以在在Red Hat的网站的http://sources.redhat.com/找到更多的关于Postgresql以及Red Hat为它开发的工具。
原文链接:https://www.f2er.com/postgresql/196383.html