PostgreSQL是自由的对象关系型数据库服务器,在其他开放源代码数据库系统和专有系统之外,为用户提供了又一种选择。 PostgreSQL这个单字的拼法让有些人觉得很难念,特别是把SQL念作”sequel”的人。
PostgreSQL 是自由的对象关系型数据库服务器,在灵活的 BSD 许可证下发行。它在其他开放源代码数据库系统,和专有系统之外,为用户提供了又一种选择。 PostgreSQL 这个单字的拼法让有些人觉得很难念,特别是那些把 SQL 念作”sequel”的人。
历史
PostgreSQL 经历了长时间的演变。该项目最初开始于在加利福尼亚大学伯克利分校的 Ingres 计划。这个计划的领导者迈克尔·斯通布雷克在 1982 年离开加利福尼亚大学伯克利分校去推进 Ingres 的商业化,但最后还是返回了学术界。在 1985 年返回伯克利之后,斯通布雷克开始了 post-Ingres 计划,致力于解决在 1980 年代早期所出现一些数据库系统存在的问题。Postgres 和 Ingres 的代码库开始(并保持)完全分离。
新项目 Postgres 的目的是通过增加最少的功能来完全支持所需要的类型。这些功能包括类型定义和完整描述数据关系的能力。完整描述数据关系的能力之前虽广为使用但却需要由用户来维护。Postgres 的数据库能够”理解”关系,并可以使用一定的规则以自然方式在相关的表中检索信息。
描述
如果很粗略地观察 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 可以显著的减少很多项目的整体编程时间,这种优势随着项目复杂而增长。