种豆资源网

当前位置:首页 > 百科 > 百科综合 / 正文

PostgreSQL

(2019-06-24 05:07:04) 百科综合
PostgreSQL

PostgreSQL

PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL,版本 4.2为基础的对象关係型资料库管理系统(ORDBMS)。PostgreSQL支持大部分 SQL标準并且提供了许多其他现代特性:複杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的数据类型、函式、操作符、聚集函式、索引。免费使用、修改、和分发 PostgreSQL,不管是私用、商用、还是学术研究使用。

基本介绍

  • 外文名:PostgreSQL
  • 开发机构:加州大学伯克利分校
  • 功能:数据管理
  • 特性:複杂查询、外键、触发器
  • 开发语言:C/C++
  • 发音:/ˈpoʊstɡrɛs ˌkjuː ˈɛl/

主要特点

特点与优势

PostgreSQL 是一个免费的对象-关係资料库伺服器(资料库管理系统),它在灵活的 BSD-风格许可证下发行。它提供了相对其他开放原始码资料库系统(比如 MySQL 和 Firebird),和专有系统(比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL Server)之外的另一种选择。
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 一大优点。

架构

PostgreSQL强壮的一个原因源于它的架构。和商业资料库一样,PostgreSQL可以用于C/S(客户/伺服器)环境。这对于用户和开发人员有很多好处。
PostgreSQL安装核心是资料库服务端进程。它允许在一个独立伺服器上。需要访问存储在资料库中的数据的应用程式必须通过资料库进程。这些客户端程式无法直接访问数据,即使它们和服务程式在同一台机器上。

版本历史

早期版本
被称为 PostgreSQL (发音为Post-gress-cue-ell)的对象-关係型资料库管理系统(有一段时间被称为 Postgres95)是从伯克利写的 POSTGRES 软体包发展而来的。经过十几年的发展, PostgreSQL 是世界上可以获得的最先进的开放源码的资料库系统, 它提供了多版本并发控制,支持几乎所有 SQL构件(包括子查询,事务和用户定 义类型和函式), 并且可以获得非常广阔範围的(开发)语言绑定 (包括 C,C++,Java,perl,tcl,和 python)。
Postgres95
在 1994 年, Andrew Yu 和 Jolly Chen 向 POSTGRES 中增加了 SQL 语言的解释器。并随后将 Postgres95 原始码发布到网际网路上供大家使用, 成为一个开放源码的,原先伯克利 POSTGRES 代码的继承者。
Postgres95 所有原始码都是完全的 ANSI C , 而且代码量减少了 25%。并且有许多内部修改以利于提高性能和代码的维护性。 Postgres95 版本 1.0.x 在进行 Wisconsin Benchmark 测试时大概比 POSTGRES v4.2 快 30-50%。
目前版本
到了 1996 年, "Postgres95"改成新名字 PostgreSQL 用于反映最初的 POSTGRES 和最新的使用 SQL 的版本之间的关係。 同时版本号也 重新从 6.0 开始, 将版本号放回到最初的由 伯克利 POSTGRES 项目开始的顺序中。
Postgres95 版本的开发重点放在标明和理解现有的后端代码的问题上。 PostgreSQL 开发重点转到了 一些有争议的特性和功能上面,当然各个方面的工作同时都在进行。
目前,PostgresSQL的稳定版本到了9.6.3,具有非常丰富的特性和商业级资料库管理系统的质量。

软体改进

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

查询语言

原来的查询语言 PostQUEL 被 SQL 取代(在 server 端实现)。在 PostgreSQL 之前还不支持子查询)(但这个功能可以在 Postgres95 里面由用户定义的 SQL 函式实现)。重新实现了聚集。同时还增加了对 GROUP BY 查询子句的支持。 C 程式仍可以调用 libpq接口函式。
新增加了利用 GNU Readline 进行互动 SQL 查询(psql)。 这个程式很大程度上取代了老的 monitor 程式。

前端库

增加了新的前端库, libpgtcl, 用以支持以 Tcl为基础的客户端。一个样本 shell, pgtclsh,提供了新的 Tcl 命令用于 Tcl 程式和 Postgres95 后端之间的互动。
彻底重写了大对象的接口。 保留了将大对象倒转(Inversion )作为存储大对象的唯一机制。 (去掉了倒转(Inversion )档案系统。)
去掉了记录级(instance-level )的规则系统。 但我们仍然可以通过重写规则使用规则。

特性教程

在发布的源码中增加了一个简短的常用 SQL 和 Postgres95 特有的 SQL 特性的教程。
用GNU make (取代了 BSD make)用于製作。 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 成为 Sequoia 2000 科学计算计画的首要数据管理器。
到了 1993 年,外部用户的数量几乎翻番。随着用户的增加。 用于原始码维护的时间日益增加 占用了太多本应该用于资料库研究的时间, 为了减少支持的负担,伯克利的POSTGRES 项目在版本 4.2 时正式终止。

版本发布

2013年10月10日,PostgreSQL 正式发布9.3.1版本。
2012年09月10日,PostgreSQL 宣布 9.2 正式版发布了!该版本主要在性能方面有很大的提升,也包括一些新的 SQL 特性以及複製支持方面,主要内容包括:
允许查询直接从索引中获取数据,避免访问堆数据 (index-only scans)
允许查询计画器为指定参数值生成自定义的计画,甚至是用了 Prepared Statement
提升计画器通过内部索引扫描来使用嵌套循环
允许流複製从节点将数据转到其他从节点 (cascading replication)
允许pg_basebackup对待机的伺服器进行基準备份
增加新工具pg_receivexlog用来收集WAL 档案的改动
增加SP-GiST(Space-Partitioned GiST) 索引访问方法
支持range data types
增加JSON数据类型
为视图增加security_barrier选项
允许 libpq 连线字元串使用URI格式
支技HP-UX
为 libpq 增加single-row processing mode以更好的处理大结果集。

软体特徵

函式

通过函式,可以在资料库伺服器端执行指令程式。儘管这样的指令程式可以使用基本的SQL语句写成,但是由于其缺乏流程控制等功能,所以在PostgreSQL中引入了使用其它程式语言编写函式的能力,包括:
  • 一个内置的名为PL/pgSQL的过程语言,类似于Oracle的PL/SQL;
  • 包括PL/Perl,plPHP,PL/Python,PL/Ruby,PL/sh,PL/Tcl与PL/Scheme在内的脚本语言;
  • 编译语言:C,C++,或Java(通过PL/Java)。
  • R统计语言(PL/R)。
以上部分的语言,甚至可以在触发器内执行。PostgreSQL支持行返回函式:它们的输出是一系列行类型数据的集合,可以在查询中当作表来使用。函式也可以被定义成以创建者或者调用者的身份运行。在某些场合,或者其他的资料库产品中,函式也会被称为“存储过程”,但技术上这两者并未有太大分别。

索引

在PostgreSQL中,用户可以自定义索引方法,或使用内置的B-tree,哈希表与GiST索引。PostgreSQL的索引功能同时也具有以下功能:
  • 反向索引检索:无须额外的索引就能实现类似ORDER BYfieldDESC的操作。
  • 表达式索引:可以建立基于表达式值而非数值或列的索引。
  • 部分索引:仅索引表的部分,可以通过在CREATE INDEX语句口添加WHERE从句以创建更小的索引。
  • 点阵图索引扫描:从8.1版开始支持此功能。该功能将读取多个索引,生成表示它们之间符合查询标準的多元组交集的点阵图。这样解决了混合索引的问题。在一个具有20列的表中,理论上能创建20! 个索引,在实际套用中已不现实。使用点阵图索引扫描后,在每次查询时,它将能把约束条件中所涉及列各自的索引进行任意的排列组合。

触发器

触发器是由SQL语句查询所触发的事件。如:一个INSERT语句可能触发一个检查数据完整性的触发器。触发器通常由INSERT或UPDATE语句触发。
在PostgreSQL中,可在数据表上设定触发器,但无法在视图中设定(对视图的UPDATE或者INSERT操作可以使用规则(RULE)定义)。多个触发器可依据字母顺序依次执行。此外,除了使用内嵌的PL/PgSQL语言之外,触发器的函式也可以用PL/Perl,PL/Python等语言编写。

并发控制

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

标 签

搜索
随机推荐

Powered By 种豆资源网||