为什么PostgreSQL是"最先进的开源数据库"

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介:

背景

打开PostgreSQL网站,你会看到这样的flag。

The world's most advanced open source database.

pic

那么它从何而来呢?

从个人对数据库的角度,在几个方面来分析一下

一、功能方面

1 数据处理能力 - 高级SQL特性

1、窗口查询

2、聚合查询,支持WITHIN GROUP、grouping sets, rollup, cube等

3、CTE, 递归查询

4、merge,upsert (on conflict)语法

5、继承

6、重写规则

7、物化视图

8、异步消息

9、advisory 锁

2 数据处理能力 - 丰富类型

除了常见类型还包括扩展类型

1、数值(整型、任意长度精度数值、浮点、序列)

2、时间、日期、时间戳

3、字符串

4、货币

5、字节流

6、布尔

7、枚举

8、几何

9、网络

10、比特流

11、全文检索

12、UUID

13、XML

14、JSON

15、数组

16、复合

17、范围

18、大对象

19、K-V类型

20、多维类型

21、树类型

22、加密类型

23、模糊查询加速类型

24、扩展类型,见扩展章节

3 数据处理能力 - 丰富函数

1、科学计算相关函数、随机函数、三角函数

2、数据集生成函数 SRF

3、几何(距离、面积、交错、支点、位置等)

4、字符串格式化、处理、编码转换、等操作函数

5、字节流处理函数

6、比特流处理函数

7、正则表达式处理函数

8、全文检索处理函数

9、JSON类型处理函数

10、枚举、网络、XML类型处理函数

https://www.postgresql.org/docs/10/static/functions-net.html

https://www.postgresql.org/docs/10/static/functions-xml.html

11、序列

12、数组处理函数(是否相交、包含、不包含、差集、交集、等)

13、范围类型处理函数(是否相交、包含、不包含、差集、交集、等)

14、条件表达式

15、子查询

16、行、数组构造器

17、聚合函数

18、窗口函数

19、触发器

20、事件触发器

4 数据快速检索能力 - 先进索引

1、函数、表达式索引

2、多列索引

3、多索引合并(bitmapAnd, bitmapOr)

4、部分索引

5、B-Tree 索引

6、hash 索引

7、GIN 倒排索引

8、GiST 通用索引

9、SP-GiST 空间分区通用索引

10、BRIN 块级索引

11、RUM 增强全文索引

12、BLOOM 布隆过滤索引

13、zombodb elasticSearch索引接口

14、b-tree, gist 合体索引

15、b-tree, gin 合体索引

16、《PostgreSQL 10.0 preview 功能增强 - 唯一约束+附加字段组合功能索引》

17、《PostgreSQL 10.0 preview 优化器改进 - 不完整索引支持复合排序》

18、《PostgreSQL 10.0 preview 性能增强 - 间接索引(secondary index)》

5 数据处理能力 - 高级编程特性

1、python存储过程

2、pgsql存储过程

3、sql存储过程

4、tcl存储过程

5、perl存储过程

6、javascript存储过程

7、CUDA存储过程](https://github.com/pg-strom/devel)

8、R存储过程

9、C嵌入式编程

10、分布式存储过程pl/proxy

11、还支持众多语言:ruby, sh, java, php, xslt等等

6 复制能力

1、逻辑流式订阅

2、物理流式复制

3、时间线逆转

7 高级内部特性

1、动态视图、统计信息、状态信息、等待事件

2、TOP SQL

3、

《PostgreSQL 锁等待监控 珍藏级SQL - 谁堵塞了谁》

4、进程进度报告

5、探针

6、扩展探针

7、buffer内窥

8、数据文件内窥

9、REDO内窥

10、钩子

11、流复制控制函数

12、事务快照接口

13、系统管理函数

14、开放协议(流复制协议、等)

15、大版本原地升级

16、plan hint

二、安全、可靠性方面

1、认证模式

秘钥认证

GSSAPI 认证

SSPI 认证

Ident 认证

Peer 认证

LDAP 认证

RADIUS 认证

Certificate 认证

PAM 认证

BSD 认证

2、行安全策略

3、视图栅栏

4、集群、库、表空间、schema、对象、角色 多级权限

5、时间点恢复

6、块级增量备份

https://github.com/postgrespro/pg_probackup

7、流式备份

8、异地容灾

9、quorum-based 任意多副本

10、FPW,full_page_write

三、性能方面

1 多核并行计算

https://www.postgresql.org/docs/10/static/parallel-query.html

2 多机并行计算

fdw + inherit + append parallel

https://www.postgresql.org/docs/10/static/postgres-fdw.html

https://www.postgresql.org/docs/10/static/tutorial-inheritance.html

3 黑科技

1、llvm

《PostgreSQL 10.0 preview 性能增强 - 推出JIT开发框架(朝着HTAP迈进)》

2、向量计算

《PostgreSQL 向量化执行插件(瓦片式实现) 10x提速OLAP》

3、列存储

《分析加速引擎黑科技 - LLVM、列存、多核并行、算子复用 大联姻 - 一起来开启PostgreSQL的百宝箱》

4 优化器

1、成本因子接口

2、统计信息

3、自定义统计信息

4、遗传算法

5、nestloop, hash, merge JOIN

6、支持 plain, sorted, hashed, mixed 聚合策略

src/backend/commands/explain.c

7、39种NODE类型

src/backend/commands/explain.c

Agg:  
Append:  
BitmapAnd:  
BitmapHeapScan:  
BitmapIndexScan:  
BitmapOr:  
CteScan:  
CustomScan:  
ForeignScan:  
FunctionScan:  
Gather:  
GatherMerge:  
Group:  
Hash:  
HashJoin:  
IndexOnlyScan:  
IndexScan:  
Limit:  
LockRows:  
Material:  
MergeAppend:  
MergeJoin:  
ModifyTable:  
NamedTuplestoreScan:  
NestLoop:  
ProjectSet:  
RecursiveUnion:  
Result:  
SampleScan:  
SeqScan:  
SetOp:  
Sort:  
SubqueryScan:  
TableFuncScan:  
TidScan:  
Unique:  
ValuesScan:  
WindowAgg:  
WorkTableScan:  

8、支持并行sort(merge sort)

四、SQL兼容性方面

1、SQL:2011

160/179项 SQL:2011 的实现,覆盖率达到 89.4%,另外还有大量扩展。

五、扩展接口方面

1、扩展函数

2、扩展聚合

3、扩展类型

4、扩展操作符

5、扩展索引

6、扩展全文检索词典

7、扩展编程语言

https://wiki.postgresql.org/wiki/PL_Matrix

8、扩展外部数据源

https://wiki.postgresql.org/wiki/Fdw

9、扩展数据采样接口

10、扩展custom scan接口

https://github.com/pg-strom/devel

11、扩展WAL接口

12、扩展GiST索引

13、扩展SP-GiST索引

14、扩展GIN索引

15、扩展BRIN索引

六、横向生态 - 插件

PostgreSQL 的扩展接口丰富,使得在开源、商业生态中有非常多PostgreSQL的扩展插件。

1、内置插件

2、pgxn

3、pgfoundry

4、github

5、独立插件生态:

商业数据库、数据库支持服务公司、用户、个人、高校、应用软件开发商、其他开源社区。

例如 PostGIS, pgrouting, pipelinedb流计算插件, timescaledb时序插件, rdkit化学插件, madlib机器学习插件, plr R语言插件, postbis DNA插件, imgsmlr图像特征插件, pgfingerprint指纹特征插件 等.

七、生态方面

1、内核生态

commitfest

内核

核心组会议

mail list

活跃度

postgresql wiki

postgresql in wiki

2、高校生态

PostgreSQL起源伯克利大学,与高校有非常深的渊源,也被业界贴上了学院派数据库的标签。同时PG社区趋于遵从行业标准设计,代码严谨、工整,许多高校将PG用于数据库教学。

3、开发者生态

4、最终用户生态, user groups

http://cn.bing.com/search?q=postgresql+user+group&qs=n&form=QBLH&sp=-1&pq=postgresql+user+group&sc=0-21&sk=&cvid=A865739EF479477EB27A3A8DB9895CC1

5、技术支持服务生态

全球有很多技术支持服务商业公司,其中不乏PostgreSQL社区的核心贡献者。

5.1、EDB

5.2、2ND

5.3、postgrespro(oleg)

5.4、PGEXPERT

5.5、河马(tom lane)

5.6、cybertec

5.7、阿里云

5.8、stackoverflow

6、全球主要贡献者

八、业务场景

1、功能强大,支持非常多业务场景

《PostgreSQL 179 种场景 - 案例实践》

2、HTAP发展方向

《数据库任督二脉 - 数据与计算的生态融合》

九、其他

功能强大,同时简单易用

《PostgreSQL on Linux 最佳部署手册》

《PostgreSQL 前世今生》

《数据库选型思考》

《数据库选型之 - 大象十八摸 - 致 架构师、开发者》

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
2月前
|
存储 NoSQL 关系型数据库
PolarDB开源数据库进阶课17 集成数据湖功能
本文介绍了如何在PolarDB数据库中接入pg_duckdb、pg_mooncake插件以支持数据湖功能, 可以读写对象存储的远程数据, 支持csv, parquet等格式, 支持delta等框架, 并显著提升OLAP性能。
87 1
|
2月前
|
存储 容灾 关系型数据库
PolarDB开源数据库进阶课11 激活容灾(Standby)节点
本文介绍了如何激活PolarDB容灾(Standby)节点,实验环境依赖于Docker容器中用loop设备模拟共享存储。通过`pg_ctl promote`命令可以将Standby节点提升为主节点,使其能够接收读写请求。激活后,原Standby节点不能再成为PolarDB集群的Standby节点。建议删除对应的复制槽位以避免WAL文件堆积。相关操作和配置请参考系列文章及视频教程。
60 1
|
2月前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课15 集成DeepSeek等大模型
本文介绍了如何在PolarDB数据库中接入私有化大模型服务,以实现多种应用场景。实验环境依赖于Docker容器中的loop设备模拟共享存储,具体搭建方法可参考相关系列文章。文中详细描述了部署ollama服务、编译并安装http和openai插件的过程,并通过示例展示了如何使用这些插件调用大模型API进行文本分析和情感分类等任务。此外,还探讨了如何设计表结构及触发器函数自动处理客户反馈数据,以及生成满足需求的SQL查询语句。最后对比了不同模型的回答效果,展示了deepseek-r1模型的优势。
141 0
|
2月前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课14 纯享单机版
PolarDB不仅支持基于“共享存储+多计算节点”的集群版,还提供类似开源PostgreSQL的单机版。单机版部署简单,适合大多数应用场景,并可直接使用PostgreSQL生态插件。通过Docker容器、Git克隆代码、编译软件等步骤,即可完成PolarDB单机版的安装与配置。具体操作包括启动容器、进入容器、克隆代码、编译软件、初始化实例、配置参数及启动数据库。此外,还有多个相关教程和视频链接供参考,帮助用户更好地理解和使用PolarDB单机版。
96 0
|
2月前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课13 单机版转换为集群版
本文介绍如何将“本地存储实例”转换为“共享存储实例”,依赖于先前搭建的实验环境。主要步骤包括:准备PFS二进制文件、格式化共享盘为pfs文件系统、启动pfsd服务、停库并拷贝数据到pfs内、修改配置文件,最后启动实例。通过这些操作,成功实现了从本地存储到共享存储的转换,并验证了新实例的功能。相关系列文章和视频链接提供了更多背景信息和技术细节。
44 0
|
1月前
|
关系型数据库 数据库 PostgreSQL
【赵渝强老师】PostgreSQL的模板数据库
在PostgreSQL中,创建新数据库时,默认通过拷贝`template1`实现。`template1`包含标准系统对象,可自定义以影响新数据库内容;而`template0`是纯净模板,仅含预定义对象且不应修改。视频讲解和代码示例展示了如何查看现有数据库信息及标识字段的作用。 ![图示](https://ucc.alicdn.com/pic/developer-ecology/yub6x2mlkqwck_398ed06397a44c2d9bfbb5ae5c90bbc0.png) [视频链接](https://www.bilibili.com/video/BV1szyfY4EQn)
【赵渝强老师】PostgreSQL的模板数据库
|
2月前
|
关系型数据库 分布式数据库 数据库
喜报|PolarDB开源社区荣获“2024数据库国内活跃开源项目”奖
喜报|PolarDB开源社区荣获“2024数据库国内活跃开源项目”奖
|
2月前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课12 集群版转换为单机版
本文介绍了如何将“共享存储实例”转换为“本地存储实例”,实验环境依赖于Docker容器中的loop设备模拟共享存储。具体步骤包括准备本地目录、停库、拷贝数据、修改配置文件并启动实例。通过这些操作,可以实现从共享存储到本地存储的平滑转换。相关系列文章详细记录了PolarDB RAC一写多读集群的搭建与管理,提供了丰富的实战经验。
39 3
|
2月前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课18 通过pg_bulkload适配pfs实现批量导入提速
本文介绍了如何修改 `pg_bulkload` 工具以适配 PolarDB 的 PFS(Polar File System),从而加速批量导入数据。实验环境依赖于 Docker 容器中的 loop 设备模拟共享存储。通过对 `writer_direct.c` 文件的修改,替换了一些标准文件操作接口为 PFS 对应接口,实现了对 PolarDB 15 版本的支持。测试结果显示,使用 `pg_bulkload` 导入 1000 万条数据的速度是 COPY 命令的三倍多。此外,文章还提供了详细的步骤和代码示例,帮助读者理解和实践这一过程。
73 1
|
2月前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课16 接入PostGIS全功能及应用举例
本文介绍了如何在PolarDB数据库中接入PostGIS插件全功能,实现地理空间数据处理。此外,文章还提供了使用PostGIS生成泰森多边形(Voronoi diagram)的具体示例,帮助用户理解其应用场景及操作方法。
68 1

相关产品

  • 云原生数据库 PolarDB
  • 云数据库 RDS PostgreSQL 版