暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

关于PostgreSQL

DB小榴莲 2019-12-18
1884

图片来自https://www.postgresql.org


PostgreSQL简介


PostgreSQL(http://www.postgresql.org/)是一个开源的关系型数据库管理系统,最初源于加州大学伯克利分校的一个研究项目。该系统最早是基于BSD许可证发布的,但目前已改为使用PostgreSQL许可证(简称 TPL)发布。事实上这两种许可证无论从哪方面看都没有区别。


PostgreSQL 的悠久历史可追溯到1985年,拥有诸多企业级特性,比如支持窗口函数(用户可以自定义聚合函数并当作窗口函数使用)、普通 CTE 表达式、递归CTE表达式以及流式复制等。这些特性在 Oracle、SQL Server、DB2 等较新版本的商用数据库中很常见,但在开源数据库界却几乎没有。另外,PostgreSQL 有一点与众不同,它可以在不用重编译任何代码的情况下轻松实现系统功能的扩展。PostgreSQL不但支持众多高级特性,而且性能也很好,在很多应用场景下其性能甚至可以超越包括商用数据库在内的大多数数据库。



PostgreSQL的特别之处以及选用理由


PostgreSQL之所以特别,是因为它不仅仅是一个数据库,还是一个功能强大的应用开发平台。


PostgreSQL支持用多种编程语言编写存储过程和函数。除了系统自带的编程语言外,还可以通过安装语言扩展包来支持新的语言。内置的基础语言包括SQL和PL/pgSQL,通过安装扩展包还可以支持PL/Perl、PL/Python、PL/V8(又称为 PL/JavaScript)以及PL/R等。前述语言的安装包在PostgreSQL发行版中大多都已自带,需要时安装一下扩展包即可使用。这种支持多语言的能力是非常有价值的,因为每种语言的特点不同,有的语言适合解决特定领域内的问题,有的语言过程化特性更丰富,有的语言语法特性更强大,那么开发人员就可以根据待解决问题的特点来选择最合适的语言。比如可以通过使用R语言的统计和图形函数以及R语言中简洁的专业表达式来解决统计领域的问题,可以通过Python来调用Web服务,也可以编写map reduce函数并在SQL语句中调用。


用户甚至可以写一个聚合函数并嵌入到上述这些语言中,这样就可以把 SQL语言的聚合运算能力与上述语言本身的能力相结合,从而拓展了这些语言的能力范围。此外,PostgreSQL还支持调用C语言写的函数,与调用上述其他语言写的函数没有区别。可以在同一个 SQL 语句中调用分别由不同语言编写的多个函数。甚至可以仅使用SQL语言(即无过程化能力的纯 SQL)来创建一个用户自定义聚合函数。在 MySQL 和 SQL Server 中,用户自定义聚合函数是需要对数据库软件本身进行重编译才能做到的,但在 PostgreSQL中却不需要。简而言之,PostgreSQL 对多语言的支持是极其灵活和强大的,开发人员不但能够为不同任务选择不同的编程语言,也能够为同一任务的不同子任务选用不同的语言。 另外,在其他绝大多数数据库都不允许使用 SQL 的场景下,PostgreSQL也允许你使用SQL。PostgreSQL中不用编译任何代码就可以创建非常复杂的函数。


PostgreSQL支持非常强大的用户自定义数据类型功能,不但使用方法简单,而且性能也超越了绝大多数其他关系型数据库。在用户自定义数据类型方面,与PostgreSQL 实力最接近的对手只有 Oracle。用户可以在 PostgreSQL中定义新的数据类型,然后就可以将该数据类型用作表列类型。每种数据类型都有伴随的数组类型,这样可以将某个类型的数组存储到某个数据列中,或者在SQL语句中使用该数组。另外还可以为新增的数据类型定义相应的运算符、函数和索引绑定来与其协同工作。很多PostgreSQL的第三方扩展包就利用该自定义数据类型能力来优化性能,或者通过添加支持某个领域专用的特殊 SQL 语法来让业务代码更简洁和易于维护,或者实现一些在别的数据库中完全不可能实现的功能。

如果不需要自定义数据类型和相应的函数,那么系统自带的数据类型也是种类繁多的,比如 json(在 9.2 版中引入),另外还有很多数据类型扩展包可供选择。很多这类扩展包是 PostgreSQL 发行版中自带的。从 PostgreSQL 9.1 开始引入了一种新的语法:CREATE EXTENSION。该语法仅通过一条 SQL 语句就实现了扩展包的安装。如果需要在某个数据库中使用某个扩展包的功能,则在该数据库中安装该扩展包即可。通过 CREATE EXTENSION 语法,可以安装前述任何一种过程式语言(简称 PL),以及使用比较广泛的数据类型及其相应的函数和运算符,比如 hstore 键 - 值存储、ltree 层次化存储、PostGIS 地理空间扩展以及数不胜数的其他扩展。举个例子,如果想加载 hstore,只需执行下面这 个命令即可:

    CREATE EXTENSION hstore;

    PostgreSQL 在其支持的所有平台上的功能表现都很一致。因此你根本不需要担心你的客户要求支持哪种操作系统,Unix、Linux、Mac OS X、Windows,PostgreSQL 全都支持。PostgreSQL 官方站点提供各种操作系统下的二进制安装包下载,当然你也可以自行编译安装。


    不适用PostgreSQL的场景


    PostgreSQL 从一开始就被设计为一个通用的事务型数据库。很多人把它用在小型的桌面应用程序中,就类似一个 SQL Server Express 免费版或者是 Oracle Express 免费版。但这种用法存在的问题是:作为一个独立的数据库系统,PostgreSQL 自身会进行全面的安全管理(比如用户登录机制,这个机制在嵌入式场景下是不需要的),这些都是要耗费性能的,但 PostgreSQL又无法取消安全机制并将其交由上层应用去管理, 因此单用户应用场景下 PostgreSQL可能不是最好的选择。此种场景下 SQLite或者Firebird 是更合适的选择,因为用户权限管理、安全检查和 DB 操作日志功能都是由上层应用自己完成的。


    令人遗憾的一个事实是,很多共享主机(多个租户共享同一个操作系统)供应商并不支持预安装 PostgreSQL,或者只支持安装一个很陈旧的 版本。因此,如果在使用共享主机服务,你可能就不得不使用 MySQL。目前虚拟专用主机和云服务器(每个租户独享一个操作系统,多租户之间互不干扰)的租用价格已经趋于合理,而且会越来越便宜。与共享主机相比, 其价格不会高出很多,而且可以在上面安装任何你希望安装的软件。因此选择专用的云主机服务会是比较明智的做法,因为你可以安装 PostgreSQL 的最新稳定版,而无需受制于与其他租户共享主机时的种种限制。此外,主流的 PaaS 平台均已支持 PostgreSQL,而且一般都支持最新的发行版。这些主流平台包括:SalesForce Heroku PostgreSQL、 Engine Yard、Red Hat OpenShift,以及 Amazon RDS for PostgreSQL。


    PostgreSQL 的功能极其强大,强大到“令人生畏”。它绝对不是一套仅仅能做些数据存储的小软件,它是如同一只聪慧的大象般智能又强大的大型系统。如果你所需要的仅仅是一个键-值存储,或者一个只要能装数据就行的小软件,那么 PostgreSQL 必定会远比你的期望强大百倍。

    最后修改时间:2020-01-04 19:21:36
    文章转载自DB小榴莲,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论