PostgreSQL为什么值得学习
作者:鱼仔
博客首页: codeease.top (opens new window)
公众号:神秘的鱼仔
# 前言
stackoverflow 每年会进行一次年度开发者调查,截止我写这篇博客的时间:2025年7月1日,最新的开发者年度报告是2024年,报告地址如下:
https://survey.stackoverflow.co/2024/ (opens new window)
在这篇报告中,有一块区域统计了最受欢迎的数据库,其中PostgreSQL以48.7%的票数超越了MySQL,连续第二年成为最受欢迎的数据库。
我用PostgreSQL的契机是项目中需要用到向量数据库,而PostgreSQL通过一个vector插件就可以支持向量化数据的功能,于是就是PostgreSQL打上交道了。
这个系列的文章会基于目前最新的PostgreSQL 17版本,带你从入门到精通地学习到PostgreSQL,本系列博客的内容会参考官方的文档,并结合笔者自己的经验给出。地址如下:
https://www.postgresql.org/docs/17/intro-whatis.html (opens new window)
第一章我们就来聊聊PostgreSQL是什么,以及他能做哪些事情。
# PostgreSQL简介
这是PostgreSQL官网的第一句话:世界上最先进的开源关系型数据库
一般的项目如果这样说的话肯定被怼了,但PostgreSQL确实有这个实力。通过theirstack官网的统计,截止2025年8月6号,已经有超过14万家公司在使用PostgreSQL
国外的像苹果、亚马逊等大企业都是PostgreSQL的使用者,国内使用PostgreSQL的公司也很多,比如阿里巴巴、腾讯、高德地图、百度地图等等都在部分领域将PostgreSQL作为数据库的选择。
PostgreSQL的开源协议十分宽松,总结下来就是:
1、允许免费使用、修改、分发、商用;
2、无需开源衍生作品(不具备“传染性”);
3、仅需保留原始版权声明和许可条款。
完整协议可以看官网:https://www.postgresql.org/about/licence/ (opens new window)
其中第二点,很明显指向了MySQL,MySQL使用的开源协议是GPL,意味着如果基于MySQL改动了代码,你的所有代码也必须开源,这也是现在很多公司选择PostgreSQL的原因。
# PostgreSQL和MySQL的区别
下面这张图是用GPT生成后修改得到,基本上把两者的特性都讲到了。
特性 | PostgreSQL | MySQL |
---|---|---|
类型 | 面向对象的关系型数据库(ORDBMS) | 传统关系型数据库(RDBMS) |
复杂查询 | 支持复杂查询、窗口函数、CTE、递归查询等 | 基本支持,但复杂查询性能相对较弱 |
JSON 支持 | 完善(支持 JSONB 索引、查询) | 基础支持(较弱的 JSON 查询能力) |
事务处理 | 强,支持完整的 ACID 特性 | 取决于存储引擎(如 InnoDB 支持 ACID) |
并发控制 | 多版本并发控制(MVCC) | InnoDB 实现 MVCC,细节不同 |
数据类型 | 类型丰富(如 UUID, Array, Range, JSONB) | 类型有限 |
扩展性 | 插件丰富,可自定义类型、函数、索引 | 插件相对较少 |
标准 SQL 支持 | 更接近 SQL 标准(ANSI SQL) | 有部分 MySQL 自己的语法扩展 |
性能优化 | 更适合复杂分析型查询 | 更适合读密集型、简单 OLTP 场景 |
复制功能 | 原生支持逻辑复制、流复制 | 支持主从复制、GTID、组复制(更成熟) |
社区与生态 | 强大、学术支持多 | 企业广泛使用,生态工具极多 |
安装部署 | 相对复杂 | 简单、轻量 |
插件系统 | 高度可扩展(如 TimescaleDB、PostGIS) | 插件限制多 |
PostgreSQL相比MySQL有几个比较大的不同点,首先它是object-relational数据库,对象关系型数据库,而MySQL是关系型数据库。对象关系型数据库引入了对象的概念,会有继承、自定义类型的特性,这个后面都会讲到。
PostgreSQL支持更多的复杂查询函数,适合有更多复杂查询的场景;而MySQL适合读密集型的场景。
PostgreSQL可以很方便地扩展插件,比如我现在在用的向量数据库就是一个PGSQL的插件。
# 总结
本篇博客主要介绍了PostgreSQL是什么,以及它和MySQL之间的区别,接下来开始都将是实践内容。
参考文档:
https://www.freecodecamp.org/chinese/news/2021-postgres-1/ (opens new window)
https://www.postgresql.org/docs/17/intro-whatis.html (opens new window)