PostgreSQL是什么?StackOverflow上开发者最爱和最想要的关系型数据库

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: #### **经常会有人问我PostgreSQL是什么? ** 这个问题不太好回答,因为PostgreSQL除了可以让你做到几乎所有其他主流关系型数据库能做的事情外,还可以做到很多别的数据库做不到的事情。

经常会有人问我PostgreSQL是什么?

这个问题不太好回答,因为PostgreSQL除了可以让你做到几乎所有其他主流关系型数据库能做的事情外,还可以做到很多别的数据库做不到的事情。

如果非要一个简单直接、便于理解的定义,那么你可以理解为一个开源可自由扩充的Oracle

尽管这并不是非常准确。因为PostgreSQL对程序员要更友好一些,下图是来自StackOverflow 2017年的一些统计,参考Developer Survey Results 2017

  • 最想要的数据库

最想要的数据库.png

  • 最爱的数据库

最爱的数据库.png

如果只是说关系型数据库,那么“StackOverflow年度统计中开发者最爱和最想要的关系型数据库”这个结论不难得出。

而对比其中的最热门:

流行度.png

你会发现一个有意思的现象:对你最好的未必是那个大家都知道的

PostgreSQL好在哪里?

在回答了前面的回答之后,这是更多的人会想问的第二个问题。

而对于这颗沧海遗珠,用一句话其实难以尽述。如果非要总结,可以认为有以下几点:

  • 稳定

    PostgreSQL的代码质量是被很多人认可的,经常会有人笑称PG的开发者都是处女座。基本上,PG的一个大版本发布,经过三两个小版本就可以上生产,这是值得为人称道的一个地方。从PostgreSQL漂亮的commit log就可见一斑,[PostgreSQL的COMMIT LOG](https://git.postgresql.org/gitweb/?p=postgresql.git;a=log;h=6912acc04f0bbcfdb799a120618507601e862490)
    
    而得益于PostgreSQL的多进程架构,一个连接的异常并不影响主进程和其他连接,从而带来不错的稳定性。
    
  • 性能

我们内部有些性能上的数据,TPCC的性能测试显示PostgreSQL的性能与商业数据库基本在同一个层面上。

  • 丰富

    PostgreSQL的丰富性是最值得诉说的地方。因为太丰富了,以至于不知道该如何突出重点。最全面的例子,可以找 自带博客外挂光环的 @德哥 。这里只列举几个我认为比较有意思的几点(查询、类型、功能):

    • 查询的丰富

      且不说HASH\Merge\NestLoop JOIN,还有递归、树形(connect by)、窗口、rollup\cube\grouping sets、物化视图、SQL标准等,还有各种全文检索、规则表达式、模糊查询、相似度等。在这些之外,最重要的是PostgreSQL强大的基于成本的优化器,结合并行执行(并行扫瞄、并行JOIN等)和多种成本因子,带来各种各样丰富灵活高效的查询支持。
      
    • 类型的丰富

      如高精度numeric, 浮点, 自增序列,货币,字节流,时间,日期,时间戳,布尔, 枚举,平面几何,立体几何,多维几何,地球,PostGIS,网络,比特流,全 文检索,UUID,XML,JSON,数组,复合类型,域类型,范围,树类型,化 学类型,基因序列,FDW, 大对象, 图像等。
      
      [PS: 这里的数组,可以让用户像操作JAVA中的数组一样操作数据库中的数据,如 item[0][1]即表示二维数组中的一个元素,而item可以作为表的一个字段。]
      
       或者,如果以上不够满足,你可以自定义自己的类型(create type),并且可以针对这些类型进行**运算符重载**,比如实现IP类型的加减乘除(其操作定义依赖于具体实现,意思是:你想让IP的加法是什么样子就是什么样子)。
       
      另外还有各种索引的类型,如btree, hash, gist, sp-gist, gin, brin , bloom , rum 索引等。你甚至可以为自己定义的类型定制特定的索引和索引扫瞄。
      
    • 功能的丰富

      PostgreSQL有一个无与伦比的特性——插件。其利用内核代码中的Hook,可以让你在不修改数据库内核代码的情况下,自主添加任意功能,如PostGIS、JSON、基因等,都是在插件中做了很多的自定义而又不影响任何内核代码从而满足丰富多样的需求。**而PostgreSQL的插件,不计其数**。
      
      FDW机制更让你可以在同一个PostgreSQL中像操作本地表一样访问其他数据源,如Hadoop、MySQL、Oracle、Mongo等,且不会占用PG的过多资源。**比如我们团队开发的OSS\_FDW就用于实现对OSS的读写**。
      

    至于其他的,举个简单的例子,PostgreSQL的DDL(如加减字段)是可以在事务中完成的 [PS: PostgreSQL是Catalog-Driven的,DDL的修改基本可以理解为一条记录的修改]。这一点,相信做业务的同学会有体会。

谈到与商业数据库的对比,这里有一张比较有意思的图,权作消遣:

数据库历史.gif

可以看得出来,PostgreSQL与很多商业数据库还是有一定历史渊源上的,大多是基于System R。

如果觉得不过瘾,再来点干的,看看PostgreSQL与这些数据库大厂这些年的恩爱情仇(图比较大,PG在左边最上面那条线,然后连着中间最上面第二条线)

RDBMS_Genealogy_V5.jpg

如何开始

业务从一个数据库迁移到另外一个数据库,不是一件容易的事。那么,你是否要考虑一下,在新的业务上尝试不同的可能?

关于选型,这篇数据库选型十八摸 之 PostgreSQL - 致 架构师、开发者可能会帮到你。

另外,这里有PG大神@德哥准备的系列的培训资料,和PG入门文档

而更多的资料,在云栖上搜索”postgresql"即可,这里是传送门:更多文章资料

Have fun!

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
23天前
|
关系型数据库 MySQL 数据库
开发者如何使用数据库文件存储 DBFS
【10月更文挑战第10天】开发者如何使用数据库文件存储 DBFS
56 5
|
22天前
|
关系型数据库 MySQL 分布式数据库
零基础教你用云数据库PolarDB搭建企业网站,完成就送桌面收纳桶!
零基础教你用云数据库PolarDB搭建企业网站,完成就送桌面收纳桶,邀请好友完成更有机会获得​小米Watch S3、小米体重称​等诸多好礼!
零基础教你用云数据库PolarDB搭建企业网站,完成就送桌面收纳桶!
|
1月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
2月前
|
SQL 关系型数据库 数据库
PostgreSQL数据库报错 ERROR: multiple default values specified for column "" of table "" 如何解决?
PostgreSQL数据库报错 ERROR: multiple default values specified for column "" of table "" 如何解决?
282 59
|
6天前
|
数据库
|
8天前
|
SQL 关系型数据库 数据库
PostgreSQL性能飙升的秘密:这几个调优技巧让你的数据库查询速度翻倍!
【10月更文挑战第25天】本文介绍了几种有效提升 PostgreSQL 数据库查询效率的方法,包括索引优化、查询优化、配置优化和硬件优化。通过合理设计索引、编写高效 SQL 查询、调整配置参数和选择合适硬件,可以显著提高数据库性能。
47 1
|
12天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
52 4
|
12天前
|
存储 数据库 开发工具
开发者如何使用云数据库 ClickHouse
【10月更文挑战第21天】开发者如何使用云数据库 ClickHouse
17 1
|
4天前
|
关系型数据库 分布式数据库 数据库
锦鲤附体 | PolarDB数据库创新设计赛,好礼不停!
锦鲤附体 | PolarDB数据库创新设计赛,好礼不停!
|
28天前
|
Cloud Native 关系型数据库 分布式数据库
开发者如何使用云原生数据库PolarDB
【10月更文挑战第5天】开发者如何使用云原生数据库PolarDB
36 2