产品特性
PostgreSQL 的特征可以概括为:关系模型是基础,类型、操作符、索引和执行能力可以扩展。它不是把关系表和文档存储简单拼接,而是让不同数据类型在统一事务、查询优化和权限体系中工作。
事务与并发
| 能力 | 说明 |
|---|---|
| ACID 事务 | 支持事务、保存点、两阶段提交和崩溃恢复 |
| MVCC | 通过行版本与快照隔离读写,普通查询不会用读锁阻塞行更新 |
| 隔离级别 | 支持 Read Committed、Repeatable Read 和 Serializable;Read Uncommitted 按 Read Committed 处理 |
| 行级锁 | 对需要协调写入的业务提供显式行锁模式 |
| SSI | Serializable 使用可串行化快照隔离检测危险依赖,事务可能因序列化失败而重试 |
MVCC 降低读写冲突,但不消除写写冲突,也不代表任意业务不变量都能自动满足。隔离级别、唯一约束、显式锁和重试机制需要共同设计。
数据与查询能力
| 类别 | 代表能力 |
|---|---|
| 标量类型 | 数值、字符、日期时间、布尔、UUID、网络地址、范围与多范围 |
| 复合数据 | 数组、复合类型、JSON、JSONB、XML |
| 查询能力 | CTE、窗口函数、递归查询、聚合过滤、物化视图 |
| 文本能力 | 词典、分词配置、全文检索和相似度扩展 |
| 空间能力 | 核心几何类型;生产 GIS 通常使用 PostGIS 扩展 |
| 数据组织 | 表空间、声明式分区、外部数据封装器和物化视图 |
JSONB 适合结构有变化但仍需要事务、关联和索引的数据。若主要访问始终依赖固定字段,显式关系列通常能提供更清晰的约束、统计信息和类型语义。
可扩展体系
PostgreSQL 可以扩展的不只是函数:
- 数据类型、类型转换、操作符和聚合函数。
- B-tree、GiST、GIN 等访问方法的 Operator Class。
- 过程语言和后台工作进程。
- Foreign Data Wrapper(FDW),把外部数据源映射为外部表。
- 逻辑解码输出插件和逻辑复制能力。
扩展运行在数据库服务的信任边界内。引入前需要确认版本兼容、升级路径、备份恢复、主备安装一致性和维护状态,不能只判断功能是否可用。
适用边界
| 场景 | 适配原因 | 需要评估 |
|---|---|---|
| 核心事务系统 | 约束、事务、复杂查询和成熟恢复机制 | 连接数、热点行、VACUUM 和高可用 |
| 复杂业务数据 | 丰富类型、表达式、JSONB 与关系查询结合 | 数据模型是否被过度动态化 |
| GIS | PostGIS 提供空间类型、索引和空间函数 | 坐标系、数据规模和空间查询模式 |
| 中等规模分析 | 并行查询、列式扩展、分区和物化视图 | 原生堆存储不等同于专用 MPP 数仓 |
| 数据集成 | FDW、逻辑复制和逻辑解码 | 跨源事务、一致性和下推能力 |
PostgreSQL 原生是单节点存储引擎。它可以通过流复制提升可用性和读扩展,但写入横向扩展、自动分片和完整故障编排通常依赖上层方案或扩展。