1.1 什么是PostgreSQL
1.1.1 PostgreSQL 概述
PostgreSQL 数据库是目前功能最强大的开源数据库, 支持丰富的数据类型(如JSON 和JSONB类型、数组类型)和自定义类型。而且它提供了丰富的接口,可以很容易地扩展功能。
1.1.2 PostgreSQL 数据库的优势
PostgreSQL 有以下的优势
a, PostgreSQL数据库目前是功能最强大的开源数据库,它是最接近工业标准SQL92的查询语言,并且正在实现新的功能以兼容最新的SQL标准:SQL2003。
b, 稳定可靠:PostgreSQL 是唯一能做到零丢失的开源数据。有报道称国外的部分银行也在使用PostgreSQL数据库。
c,开源省钱:PostgreSQL 数据库是开源的,免费的,而且是BSD协议,在使用和二次开发上基本没有限制。
d,支持广泛:PostgreSQL 数据库支持大量的主流开发语言,包括C、C++、Java、Phthon以及PHP等
e,PostgreSQL 社区活跃: PostgreSQL基本上每三个月推出一个补丁版本。
1.1.3 PostgreSQL 应用现状和发展趋势
PostgreSQL 目前在国外很流行,特别是近几年使用PostgreSQL数据库的公司越来越多。
比如,日本电信(NTT)大量使用PostgreSQL 替代Oracle数据库,并且在PostgreSQL之上二次开发了Postgres-XC, 网络电话公司Skype 也大量使用PostgreSQL,并贡献了一些与PostgreSQL数据库配套的开源软件。
全球最大的CRM软件服务提供商Salesforce 也开始使用PostgreSQL。
在国内越来越多的公司开始使用PostgreSQL,如斯凯网络(股票代码:MOBI)的后台数据库基本使用的都是PostgreSQL数据库,去哪儿网(qunar.com)也大量使用了PostgreSQL数据库。
主流的云服务提供商亚马逊、阿里云的RDS(关系型数据库服务)同样提供了PostgreSQL的支持
1.2 PostgreSQL 数据库与其他数据库的对比
1.2.1 PostgreSQL 与MYSQL数据库的对比
可能有人会问, 既然已经有一个人气很高的开源数据库MYSQL了,为什么还要使用PostgreSQL?这主要是因为在一些应用场景中,使用MYSQL有以下几个缺点。
a, 功能不够强大:MYSQL的多表连接查询方式只支持“Nest Loop”, 不支持“Hash join” 和 “sort merge join”。不仅如此还有很多SQL 语法也不支持,子查询性能比较低。它不支持sequence。
b, 性能优化工具和度量信息不足:MYSQL在运行过程中出现问题,只产生很少的性能数据,很难让维护人员准确定位问题产生的原因。
c,在线操作功能较弱
相对这些MYSQL的弱点, PostgreSQL有以下几个优点:
PostgreSQL功能强大:支持是所有主流的多表连接查询的方式(如:“Nest Loop”、 “Hash join”等)
性能优化工具与度量信息丰富: PostgreSQL数据库中有大量的性能视图,可方便地定位问题(比如:可看到正在执行的SQL, 可通过锁视图看到谁在等待、哪条记录被锁定等)
在线操作功能好:PostgreSQL增加空值的列时,本质上只是在系统表上把列定义上,无须对物理结构做更新, 这就让PostgreSQL在加列时可以做到瞬间完成。PostgreSQL还支持在线建索引的功能,建索引的过程可以不锁定更新操作。
从PostgreSQL9.1开始,支持同步复制功能(synchronous replication)通过master和slave之间的复制可以实现零数据丢失的高可用方案。
另外,由于MySQL对SQL语法支持的功能更弱,基本上不适合做数据仓库。虽然也有些厂商开发了基于MYSQL的数据仓库存储引擎(如Infobright),但这个方案只是解决了分数据仓库的问题,SQL功能弱的问题任无法解决。
PostgreSQL数据中还有一些支持移动互联网时代的新功能,如空间索引。POSTGIS是最著名的一个开源GIS系统,它是PostgreSQL中的一个插件,通过它可以很方便地解决LBS中的一些位置计算问题。
综上所述,PostgreSQL数据库是一个功能强大,又带有移动互联网特征的开源数据库。如果你仅仅是想把数据库作为一个简单的存储功能使用(如一些大的互联网公司),一些较复杂的功能都想放在应用中来实现,那么选择MYSQL或一些NOSQL产品都是合适的;如果你应用的数据访问很简单(如大多数的blog 系统)那么后端使用MYSQL也是很合适的。但如果你的应用不像blog 系统那么简单,而你又不想消耗太多的开发资源,那么PostgreSQL是一个明智的选择,最有说服力的例子就是图片分享公司instagram,在使用Python+PostgreSQL架构后,只是十几个人就支持起了整个公司的业务。在数据库中使用PostgreSQL的感觉,就是在开发语言中使用Python,会让你的工作变得简洁和高效。