进阶特性
PostgreSQL 的强大之处在于其类型系统与查询能力。本章覆盖最常被称道的特性。
JSONB:可索引的半结构化数据
JSONB 以二进制存储,支持索引与丰富的操作符;JSON 则保留原始文本与空格。
Tip
JSONB 适合属性不固定的扩展信息(如商品参数、事件负载)。但它不替代关系建模:频繁作为查询条件的字段应抽成独立列并建普通索引,性能与约束都更好。
数组
CTE 与递归查询
窗口函数
LATERAL:相关连接
LATERAL 允许子查询引用前面表的列,实现「每行取 Top-N」:
UPSERT
DISTINCT ON
扩展生态
其他知名扩展:PostGIS(地理空间)、pgvector(向量检索,用于 RAG)、TimescaleDB(时序)、Citus(分布式)、pg_stat_statements(SQL 统计)。
Warning
使用扩展前确认目标环境已安装对应扩展包(很多托管 PG 限制了可用的扩展白名单)。迁移时也要一并核对扩展清单。
小结
JSONB+ GIN 索引是处理半结构化数据的利器,但不要滥用。- 数组、CTE、递归、窗口、
LATERAL、DISTINCT ON让复杂查询更简洁。 ON CONFLICT实现优雅的 UPSERT。- 扩展是 PG 的护城河:PostGIS、pgvector、TimescaleDB 覆盖了大量专用场景。