PostgreSQL基础:简介

399 阅读5分钟

1 、什么是PostgreSQL

PostgreSQL: The World's Most Advanced Open Source Relational Database

1.1、 PostgreSQL的发展历史

  • PostgreSQL前身Ingres:PostgreSQL的前身是由加利福尼亚大学伯克利分校开始的Ingres项目,由Michael Stonebraker领导,后Michael Stonebraker离开伯克利将Ingres商业化。Ingres是一个非关系型数据库
  • 伯克利的Postgres项目:为解决Ingres的数据关系维护问题,启动了一个后Ingres(post-Ingres)项目,这是Postgres的开端,Postgres项目在4.2版本后终止
  • Postgres95:1994年,来自香港的两名伯克利研究生项Postgres增加SQL语言解释器,并改名为Postgres95,并将其开源
  • PostgreSQL6.X:1996年,更名为PostgreSQL,且版本号从6.0重新开始
  • PostgreSQL7.X:引入预写式日志。并不在限制文本类型数据段长度
  • PostgreSQL8.X:支持在Windows运行。支持事务保存点功能、改变字段类型、表空间、及时恢复等。并可以支持Perl服务器端编程语言
  • PostgreSQL9.X:9.0版本增加流复制、hot standby功能;提供大版本升级工具pg_upgrade。9.1版本增加同步复制功能;增加外部表支持。提供外部模块框架和创建扩展的SQL命令;提供不记录wal日志功能;可以在插入、更新、删除中使用次查询,解决了PostgreSQL不能实现oracle merge into的问题。9.2版本增加了级联复制功能;实现从备库做全量备份功能;实现覆盖索引查询功能;增加JSON数据类型。9.3版本增加物化视图功能;可更新外部表的功能;增加postgres_fdw模块(通过此外部表模块可访问其他pg服务器上的表);增加事件触发器。9.4版本增加JSONB数据类型;刷新物化视图不在阻塞读;wal日志开始增加逻辑读功能;提供类似oracle的alter system命令;9.5版增加了块范围索引(BRIN索引);增加表行级安全特性。9.6版本增加并行计算功能;流复制允许有多个同步备库;实现了备库吧日志重做完成后事务才返回的完全同步模式。
  • PostgreSQL10.X:实现了逻辑复制;取消hash索引不能进行流复制的限制;并行查询功能提升;增加多列统计信息;支持create table语句创建分区表;客户端连接串支持多个数据库服务器地址,连接串提供target_session_attrs,用于探测后端数据库为主库还是备库。
  • PostgreSQL11.X:增加对just-in-time编译的支持;并行方面的性能得到增强;存储过程中支持嵌入式事务;支持哈希分区,支持分区键更新。
  • PostgreSQL12.X:大大增强了分区表插入和复制数据的性能,对有很多分区表的查询,性能也有很大提升;对B-Tree索引性能进行优化,JSON数据类型开始支持SQL/JSON Path语言,方便对JSON数据进行检索。

2、PostgreSQL和其他数据库对比

2.1、同MySQL对比

  • 复杂SQL支持:PostgreSQL相较与MySQL,其支持绝大多数SQL语法,例如支持所有主流的多表连接查询方式,若"Nest loop","Hash JOIN","Sort Merge Join"等,而MySQL8.0之前仅支持"Nest loop",8.0之后开始支持"Hash JOIN"。MySQL对很多SQL语法不支持,子查询性能也比较低
  • 性能优化工具及度量信息:PostgreSQL数据库中有大量性能视图,可以方便定位问题,且设计了专门架构和进程用于收集性能数据;MySQL性能监控数据较少。
  • 在线操作功能:MySQL很多在线DDL需要重建表,有些操作会锁表,代价很大。而PostgreSQL增加空列时,本质上仅需要在系统表上把列定义,无需在物理结构做更新,所以PostgreSQL在加列时可以瞬间完成。PostgreSQL还支持在线建索引功能,创建索引的过程中可以不锁更新等操作。
  • 复制功能:MySQL是异步或者半同步的逻辑复制。PostgreSQL支持同步复制。
  • 插件扩展:MySQL难以写插件扩展MySQL的功能,PostgreSQL提供了安装、编写插件的整体框架,可以方便地写插件扩展数据库功能。

2.2、同Oracle对比

  • Oracle是目前功能最强大的商业数据库,PostgreSQL是功能最强大的开源数据库。Oracle在集群功能如RAC、ASM方面比较强,但PostgreSQL在索引和可扩展性上较强。
  • 两者都是使用共享内存的进程结构,与MySQL的线程结构不一样。另外,pg的wal日志和Oracle的redo日志都是用于记录物理块数据的变化
  • PostgreSQL在主备库方面非常完善,可以搭建同步备库、异步备库、延迟备库。另外,在配置备库的过程中,比Oracle简单,且搭建更灵活。
  • PostgreSQL有更多支持互联网特征的功能,如数据类型支持网络地址类型、XML类型、JSON类型、UUID类型及数组类型,且有强大的正则表达式函数。
  • PostgreSQL更小巧,可以在内存很小的机器上运行,如512MB的云主机,而Oracle需要在数GB的云主机才能运行。PostgreSQL在分钟级别可以安装好,Oracle需要小时级别。

参考《PostgreSQL修炼之道 从小工到专家 第2版》