日期:2014-05-16  浏览次数:20768 次

pgsql数据库怎么样?
pgsql数据库怎么样?
有没有什么大公司在用的?
稳定么?

------解决方案--------------------
著名的用户
.org 域名库 [4] 
The American Chemical Society 
Chicagocrime.org [5] 
Skype 
Penny Arcade 
IMDB 
Sony Online [6] 
U.S. Department of Labor 
Wisconsin Circuit Court Access with 6 * 180GB DBs replicated in real time 
OpenACS and .LRN 
Evergreen - 一個開放原始碼(GNU通用公共許可證)的集成圖書館系統 

------解决方案--------------------
pgsql数据库怎么样?
引用
如果很粗略地观察 PostgreSQL,会觉得这个数据库系统和其它数据库很类似。因为 PostgreSQL 使用 SQL 语言来在执行资料的查询。这些资料通过连外键联系在一起,以一系列表格的形式存在。PostgreSQL 相对于竞争者的主要优势,主要的特征为可编程性:对于使用数据库资料的实际应用,PostgreSQL 让开发与使用的工作,变得更加容易。

SQL 数据在"平面表格"中存储简单的数据类型,需要用户使用查询把有关的信息收集在一起。这与应用和用户利用数据自身的方式相对立:典型的使用带有丰富数据类型的高级语言,在其中所有有关的数据作为它自己的一个完整单元来操作。典型的称呼为记录或对象(依据各自语言)。

转换来自 SQL 世界的信息到面向对象编程世界体现得很困难,因为两者有非常不同的数据组织的模型。工业界把这个问题称为阻抗不匹配:从一个模型映射到另一个要花费项目开发者 40% 的时间。一些映射解决方案,典型的称为对象-关系映射,致力于这个问题,但是它们花费很多并有自身的问题,导致糟糕的性能或强制所有的数据访问通过映射所支持的一种语言来进行。

PostgreSQL 可以直接在数据库中解决很多这种问题。PostgreSQL 允许用户定义基于正规的 SQL 类型的新类型,允许数据库自身理解复杂数据。例如,你可以定义一个 address 来组合一些事物如街道编号、城市和国度的字符串。从这一点上你可以轻易的建立把保存地址的所需要的所有字段包含在一个单一行列中的表。

PostgreSQL 还允许类型包括继承,这是在面向对象编程中的主要概念。例如,你可以定义 post_code 类型,并接着基于它建立 us_zip_code 和 canadian_postal_code。在数据库中的 address 就可以采用 us_address 或者 canadian_address 形式,而特定的规则可以在各自情况下验证数据。在 PostgreSQL 的早期版本中,实现新类型需要写 C 扩展并把它们编译到数据库服务器中;在版本 7.4 中,通过 CREATE DOMAIN 建立和使用定制类型变得很容易了。

数据库自身的编程可以从使用函数上获得巨大的利益。多数 SQL 系统允许用户写存储过程,它是其他 SQL 语句可以调用的一块 SQL 代码。但是 SQL 自身仍旧不适合作为编程语言,而且 SQL 用户在构造复杂逻辑时要经历巨大的困难。更糟糕的是,SQL 自身不支持很多的编程语言中最基本的操作,比如分支和循环。每个厂商都转而写它们自己对 SQL 语言的扩展来增加这些特征,而这种扩展不是必须跨越数据库平台操作。

在 PostgreSQL 中程序员可以用一组可观的支持语言中任何一种来写这种逻辑。

类似于 Oracle 的过程语言 PL/SQL 的叫做 PL/PgSQL 的内置语言,在处理查询密集的过程时提供了独特的优势。
流行脚本语言比如 Perl,Python,Tcl,和 Ruby 的包装器,允许利用它们在字符串处理和连接到广阔的外部函数库的力量。
需要把复杂逻辑编译到机器代码所能提供的高性能的过程可以利用 C 或 C++。
在更加深奥的方面,R 统计语言的处理器允许数据库查询利用它的一组丰富的统计函数。
程序员可以把代码作为函数插入服务器中,它是使代码类似于存储过程的一个小包装器。以这种方式 SQL 代码可以调用(比如)C 代码或反之。

性能增进,因为数据库引擎在一个时间一个地方调用所有的逻辑,减少了在客户和服务器之间的来回往返的次数。
可靠性增进,因为数据验证代码集中到一个地方,就在服务器上,而不用依赖在多个客户应用中的同步逻辑,它们甚至可能以多种编程语言写成。
通过向服务器增加有用的抽象,客户代码可以变得更短小和简单。
这些优势合起来可以证实 PostgreSQL 从编程角度是最高级的数据库系统。使用 PostgreSQL 可以显著的减少很多项目的整体编程时间,这种优势随着项目复杂而增长。

[编辑] 特征
[编辑] 函数
通过函数,可以在数据库服务器端执行指令程序。仅管这样的指令程序可以使用基本的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索引。PosrgreSQL的索引功能同时也具有以下功能:

反向索引检索:无须额外的索引就能实现类似ORDER BY field DESC的操作。
表达式索引:可以建立基于表达式值而非数值或列的索引。
部分索引:仅索引表的部分,可以通过在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地址
数组
此外,用户可以创建自定义数据类型,通常通过Postg