快捷登录,享 免费下载
首页 > 软件列表 > PostgreSQL
PostgreSQL

PostgreSQL

对象关系数据库管理系统

软件语言:简体中文
软件授权:免费软件
适用系统:Windows
创建时间:2021-01-12
软件厂商/开发者信息:独立开发者

软件介绍

PostgreSQL是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如MySQL和Firebird),和专有系统(比如Oracle、Sybase、IBM的DB2和MicrosoftSQLServer)之外的另一种选择。

PostgreSQL不寻常的名字导致一些读者停下来尝试拼读它,特别是那些把SQL拼读为"sequel"的人。PostgreSQL开发者把它拼读为"post-gress-Q-L"。它也经常被简略念为"postgres"。

主要特点

优点

事实上,PostgreSQL的特性覆盖了SQL-2/SQL-92和SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备,比如IP类型和几何类型等;其次,PostgreSQL是全功能的自由软件数据库,很长时间以来,PostgreSQL是唯一支持事务、子查询、多版本并行控制系统(MVCC)、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。Inprise的InterBase以及SAP等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。最后,PostgreSQL拥有一支非常活跃的开发队伍,而且在许多黑客的努力下,PostgreSQL的质量日益提高。

从技术角度来讲,PostgreSQL采用的是比较经典的C/S(client/server)结构,也就是一个客户端对应一个服务器端守护进程的模式,这个守护进程分析客户端来的查询请求,生成规划树,进行数据检索并最终把结果格式化输出后返回给客户端。为了便于客户端的程序的编写,由数据库服务器提供了统一的客户端C接口。而不同的客户端接口都是源自这个C接口,比如ODBC,JDBC,Python,Perl,Tcl,C/C++,ESQL等,同时也要指出的是,PostgreSQL对接口的支持也是非常丰富的,几乎支持所有类型的数据库客户端接口。这一点也可以说是PostgreSQL一大优点。

缺点

从Postgres开始,PostgreSQL就经受了多次变化。

首先,早期的PostgreSQL继承了几乎所有Ingres,Postgres,Postgres95的问题:过于学院味,因为首先它的目的是数据库研究,因此不论在稳定性,性能还是使用方方面面,长期以来一直没有得到重视,直到PostgreSQL项目开始以后,情况才越来越好,PostgreSQL已经完全可以胜任任何中上规模范围内的应用范围的业务。目前有报道的生产数据库的大小已经有TB级的数据量,已经逼近32位计算的极限。不过学院味也给PostgreSQL带来一个意想不到的好处:大概因为各大学的软硬件环境差异太大的缘故,它是目前支持平台最多的数据库管理系统的一种,所支持的平台多达十几种,包括不同的系统,不同的硬件体系。至今,它仍然保持着支持平台最多的数据库管理系统的称号。

其次,PostgreSQL的确还欠缺一些比较高端的数据库管理系统需要的特性,比如数据库集群,更优良的管理工具和更加自动化的系统优化功能等提高数据库性能的机制等。

版本历史

早期版本

被称为PostgreSQL(发音为Post-gress-cue-ell)的对象-关系型数据库管理系统(有一段时间被称为Postgres95)是从伯克利写的POSTGRES软件包发展而来的。经过十几年的发展,PostgreSQL是世界上可以获得的最先进的开放源码的数据库系统,它提供了多版本并发控制,支持几乎所有SQL构件(包括子查询,事务和用户定义类型和函数),并且可以获得非常广阔范围的(开发)语言绑定(包括C,C++,Java,perl,tcl,和python)。

Postgres95

在1994年,AndrewYu和JollyChen向POSTGRES中增加了SQL语言的解释器。并随后将Postgres95源代码发布到互联网上供大家使用,成为一个开放源码的,原先伯克利POSTGRES代码的继承者。

Postgres95所有源代码都是完全的ANSIC,而且代码量减少了25%。并且有许多内部修改以利于提高性能和代码的维护性。Postgres95版本1.0.x在进行WisconsinBenchmark测试时大概比POSTGRESv4.2快30-50%。

当前版本

到了1996年,"Postgres95"改成新名字PostgreSQL用于反映最初的POSTGRES和最新的使用SQL的版本之间的关系。同时版本号也重新从6.0开始,将版本号放回到最初的由伯克利POSTGRES项目开始的顺序中。

Postgres95版本的开发重点放在标明和理解现有的后端代码的问题上。PostgreSQL开发重点转到了一些有争议的特性和功能上面,当然各个方面的工作同时都在进行。

目前,PostgresSQL的稳定版本到了9.3.1,具有非常丰富的特性和商业级数据库管理系统的质量。

软件改进

除了修正了一些错误,下面的是一些主要改进:

查询语言

原来的查询语言PostQUEL被SQL取代(在server端实现)。在PostgreSQL之前还不支持子查询)(但这个功能可以在Postgres95里面由用户定义的SQL函数实现)。重新实现了聚集。同时还增加了对GROUPBY查询子句的支持。C程序仍可以调用libpq接口函数。

新增加了利用GNUReadline进行交互SQL查询(psql)。这个程序很大程度上取代了老的monitor程序。

前端库

增加了新的前端库,libpgtcl,用以支持以Tcl为基础的客户端。一个样本shell,pgtclsh,提供了新的Tcl命令用于Tcl程序和Postgres95后端之间的交互。

彻底重写了大对象的接口。保留了将大对象倒转(Inversion)作为存储大对象的唯一机制。(去掉了倒转(Inversion)文件系统。)

去掉了记录级(instance-level)的规则系统。但我们仍然可以通过重写规则使用规则。

特性教程

在发布的源码中增加了一个简短的常用SQL和Postgres95特有的SQL特性的教程。

用GNUmake(取代了BSDmake)用于制作。Postgres95可以使用不加补丁的GCC(修正了偶数字节数据(doubles)的对齐问题)。

软件项目

Michael Stonebraker领导的POSTGRES项目是由防务高级研究项目局(DARPA),陆军研究办公室(ARO),国家科学基金(NSF),以及ESL,Inc共同赞助的。POSTGRES的实现始于1986年,该系统最初的概念详见POSTGRES的设计。最早的数据模型定义见The POSTGRES Data Model。当时的规则系统设计在POSTGRES规则系统的设计里描述.存储管理器的理论基础和体系结构在POSTGRES存储系统的设计里有详细描述。

从那以后,POSTGRES经历了几次主要的版本更新。第一个"演示性"系统在1987年便可使用了,并且在1988年的ACM-SIGMOD大会上展出。在1989年六月发布了版本1给一些外部的用户使用。为了回应用户对第一个规则系统的批评,作者重新设计了规则系统,并在1990年6月发布了使用新规则系统的版本2。版本3在1991年出现,增加了多存储管理器的支持,并且改进了查询执行器,重新编写了规则系统。从那以后,随后的版本直到Postgres95发布前工作都集中在移植性和可靠性上。

POSTGRES已经在许多研究或实际的应用中得到了应用。这些应用包括:一个财务数据分析系统,一个喷气引擎性能监控软件包,一个小行星跟踪数据库,一个医疗信息数据库和一些地理信息系统。POSTGRES还被许多大学用于教学用途。Illustra Information Technologies Illustra Information Technologies(并入Informix)拿到代码并使之商业化。在1992年POSTGRES成为Sequoia2000科学计算计划的首要数据管理器。

到了1993年,外部用户的数量几乎翻番。随着用户的增加。用于源代码维护的时间日益增加占用了太多本应该用于数据库研究的时间,为了减少支持的负担,伯克利的POSTGRES项目在版本4.2时正式终止。

版本发布

2013年10月10日,PostgreSQL正式发布9.3.1版本。

2012年09月10日,PostgreSQL宣布9.2正式版发布了!该版本主要在性能方面有很大的提升,也包括一些新的SQL特性以及复制支持方面,主要内容包括:

允许查询直接从索引中获取数据,避免访问堆数据()

允许查询计划器为指定参数值生成自定义的计划,甚至是用了PreparedStatement

提升计划器通过内部索引扫描来使用嵌套循环

允许流复制从节点将数据转到其他从节点(cascadingreplication)

允许pg_basebackup对待机的服务器进行基准备份

增加新工具pg_receivexlog用来收集WAL文件的改动

增加SP-GiST(Space-PartitionedGiST)索引访问方法

支持rangedatatypes

增加JSON数据类型

为视图增加security_barrier选项

允许libpq连接字符串使用URI格式

支技HP-UX

为libpq增加single-rowprocessingmode以更好的处理大结果集。

软件特征

函数

通过函数,可以在数据库服务器端执行指令程序。尽管这样的指令程序可以使用基本的SQL语句写成,但是由于其缺乏流程控制等功能,所以在PostgreSQL中引入了使用其它程序语言编写函数的能力,包括:

以上部分的语言,甚至可以在触发器内执行。PostgreSQL支持行返回函数:它们的输出是一系列行类型数据的集合,可以在查询中当作表来使用。函数也可以被定义成以创建者或者调用者的身份运行。在某些场合,或者其他的数据库产品中,函数也会被称为“存储过程”,但技术上这两者并未有太大分别。

索引

在PostgreSQL中,用户可以自定义索引方法,或使用内置的B-tree,哈希表与GiST索引。PosrgreSQL的索引功能同时也具有以下功能:

触发器

触发器是由SQL语句查询所触发的事件。如:一个INSERT语句可能触发一个检查数据完整性的触发器。触发器通常由INSERT或UPDATE语句触发。

在PostgreSQL中,可在数据表上设置触发器,但无法在视图中设置(对视图的UPDATE或者INSERT操作可以使用规则(RULE)定义)。多个触发器可依据字母顺序依次执行。此外,除了使用内嵌的PL/PgSQL语言之外,触发器的函数也可以用PL/Perl,PL/Python等语言编写。

并发控制

PostgreSQL使用多版本并发控制(MVCC,Multiversionconcurrencycontrol)系统进行并发控制,该系统向每个用户提供了一个数据库的“快照”,用户在事务内所作的每个修改,对于其他的用户都不可见,直到该事务成功提交。这从很大程度上减少了对读取锁的依赖,同时保证了数据库高效地符合ACID原则。

规则

规则(RULE)允许一个查询能被重写,通常被用作实现可更新的视图。

数据类型

PostgreSQL内置丰富的数据类型,包括:

  • 任意精度的数值

  • 无限制长度文本

  • 几何图元

  • IP地址与IPv6地址

  • 无类域间路由地址块,MAC地址

  • 数组

  • 此外,用户可以创建自定义数据类型,通常通过PostgreSQL的GiST机制,它们也能被很好得索引,比如PostGIS地理信息系统的数据类型。

    定义对象

    用户可以为数据库内几乎所有的对象定义新的类型,包括:

  • 索引

  • 操作符(可重载现有操作符。)

  • 聚合函数

  • 数据域

  • 数据类型转换

  • 会话(编码转换)

  • 继承

    数据表的结构及属性可从一个“父”表中继承,数据将在两者间共享。对子表中数据的插入或者删除也将在父表中体现,同样,对父表作出的修改,比如添加列等操作也会导致子表产生相应改动。该功能尚未完全实现,实际上,表的约束尚不能继承。比如,在一张外联参考了父表id字段的表中,插入一条具有子表中某条记录id数据的记录会导致失败,因为PostgreSQL在对父表的外键约束检查中不会检查子表的内容。

    扩展

  • 地理数据对象:PostGISGPL

  • 全文检索:通过Tsearch2或OpenFTS, 将在8.3版本中内嵌Tsearch2。GPL

  • 多种异步主/从复制方案,包括Slony-I(BSD授权),Mammoth Replicator

  • XML/XSLT支持contrib软件包中的XPath扩展GPL

  • 版本列表