什么是PostgreSQL
- 强大的开源数据库
- 支持丰富的数据类型(JSON、JSONB、数组)
- 提供了丰富的接口,可以很方便地扩展它的功能
- 支持使用流行的编程语言写自定义函数
PostgreSQL数据库的优势
- PostgreSQL数据库是目前功能最强大的开源数据库。
- 稳定可靠:PostgreSQL是唯一能做到数据零丢失的开源数据库。
- 开源省钱:PostgreSQL数据库是开源的、免费的,而且使用的是类BSD协议,在使用和二次开发上基本没有限制。
- 支持广泛:PostgreSQL数据库支持大量的主流开发语言,包括C、C++、Perl、Python、Java、Tcl、以及PHP等。
- PostgreSQL社区活跃:PostgreSQL基本上每3个月推出一个补丁版本,这意味着已知的Bug很快会被修复,有应用场景的需求也会及时得到响应。
PostgreSQL数据库与其他数据库的对比
PostgreSQL与MySQL数据库的对比
可能有人会有疑惑,既然已经有一个人气很高的开源数据库MySQL了,为什么还要使用PostgreSQL?这主要是因为不同的数据库有不同的特点,应该为合适场景选择合适的数据库。
在一些应用场景中,使用MySQL有以下几大缺点:
- 复杂SQL支持弱:在MySQL8.0之前,多表连接查询的方式只支持“Nest Loop”,不支持Hash JOIN和Sort Merge JOIN(注:MySQL8.0版本开始支持Hash JOIN,但不完善,有一些问题。另因为MySQL无完善的基于COST的优化器(CBO),长期来说也会存在一定的问题),不仅如此,它对很多SQL语法都不支持,子查询性能比较低。例如,MySQL不支持单独的sequence,有公司为此还专门开发了统一序号分发中心的软件。
- 性能优化工具与度量信息不足:如果MySQL在运行过程中出现问题,性能监控数据较少,维护人员要准确定位问题存在一定的困难。
- MySQL的复制是异步或半同步的逻辑同步,这存在两个问题:
- 大事务下会导致比较大的延迟
- 容易导致数据库的不一致,原因是逻辑复制容易导致数据的不一致性。如何实现领数据库丢失的同步复制比较头疼。
- 在线操作功能弱:很多在线DDL需要重建表,代价很大,有一些操作还会锁表。
- 难以写插件来扩展MySQL的功能:MySQL扩展能力有限,比如MySQL比较难访问其他数据库中的数据。
相对Mysql的缺点,PostgreSQL有以下几个优点:
- 功能强大:支持所有主流多表连接查询的方式
- 支持Nest loop
- 支持Hash JOIN
- Sort Merge JOIN
- 支持绝大多数的SQL语法
- 对正则表达式支持强
- 内置函数丰富
- 字段类型支持数组
- 支持存储过程
- 性能优化工具与度量信息丰富
- 有大量的性能视图
- 方便定位问题
- 在线操作功能好
- 增加空值列,在系统表定义,无须对物理结构做更新,可以瞬间完成
- 支持在线建索引,在创建索引的过程可以不锁更新操作。
- 从PostgreSQL9.1开始,支持同步复制功能,通过Master和Slave之间的复制可以实现零数据丢失的高可用方案。
- 可以方便地写插件来扩展PostgreSQL数据库的功能
- 支持复杂SQL,支持大量的分析函数,适合做数据仓库
- 空间索引
PostgreSQL与Oracle数据库的对比
Oracle数据库是目前功能最强大的商业数据库,PostgreSQL则是功能最强大的开源数据库。
Oracle在集群功能如RAC、ASM、方面比较强,但PostgreSQL也有一些比Oracle强的特性,如在索引和可扩展等方面。
- PostgreSQL与Oracle有很多相似之处,它们都是使用共享内存的进程结构,客户端与数据库服务器建立一个连接后,数据库服务器就启动一个进程来为这个连接服务
- PostgreSQL在主备库方面非常完善,可以搭建同步备库、异步备库、延迟备库。备库搭建比较简单,也更灵活
- PostgreSQL有更多支持互联网特征功能,where条件可以使用正则表达式匹配,也可以使用Python、Perl等语言写存储过程等
- PostgreSQL更小巧,可以在内存很小的机器上完美运行起来。安装时间在分钟级,而Oracle在小时级