PostgreSQL 知识体系概览
问题
PostgreSQL 的核心特性是什么?与 MySQL 有什么区别?面试中 PostgreSQL 的重点有哪些?
答案
一、PostgreSQL 定位
PostgreSQL 是一个功能最丰富的 开源关系型数据库,被称为「世界上最先进的开源数据库」。
| 对比项 | PostgreSQL | MySQL(InnoDB) |
|---|---|---|
| 许可协议 | BSD(完全自由) | GPL(开源版)/ 商业许可 |
| MVCC 实现 | 多版本存储在堆表 + VACUUM | undo log 版本链 |
| 数据类型 | 极其丰富:JSONB、数组、范围、几何 | 较标准的数据类型 |
| JSON 支持 | 原生 JSONB,可建索引 | JSON 类型,5.7+ 支持 |
| 全文搜索 | 内置(tsvector/tsquery) | 需要 InnoDB 全文索引 |
| 窗口函数 | 早期支持,功能完善 | 8.0 才支持 |
| CTE | 支持递归 CTE、物化控制 | 8.0 支持 |
| 扩展机制 | 极强(PostGIS、pgvector、TimescaleDB) | 有限 |
| 索引类型 | B-tree、Hash、GiST、SP-GiST、GIN、BRIN | B-tree、Hash、全文 |
| 并发控制 | SSI(可序列化快照隔离) | Next-Key Lock |
| 分区表 | 声明式分区(10+) | 分区表(5.1+) |
| 逻辑复制 | 内置(10+) | 需要第三方工具 |
| 适用场景 | 复杂查询、GIS、分析、JSON | Web 应用、简单业务 |
二、知识体系
三、面试重点分布
| 主题 | 频率 | 核心知识点 |
|---|---|---|
| PostgreSQL vs MySQL | ⭐⭐⭐⭐⭐ | 区别、选型依据 |
| JSONB | ⭐⭐⭐⭐ | 存储、查询、索引 |
| 窗口函数 | ⭐⭐⭐⭐ | ROW_NUMBER、RANK、LAG/LEAD |
| CTE | ⭐⭐⭐ | 递归 CTE |
| 全文搜索 | ⭐⭐⭐ | tsvector、tsquery |
| MVCC/VACUUM | ⭐⭐⭐ | 与 MySQL MVCC 的区别 |
| pgvector | ⭐⭐⭐ | AI/RAG 场景 |
| 扩展机制 | ⭐⭐ | 常见扩展 |