PostgreSQL 特性详解

PostgreSQL 被称作「最先进的开源数据库」,先进在哪?本专栏挑出 19 个真正拉开差距的特性,每个都配 PG 18.4 上的真实 SQL 与输出,横向对比 MySQL / Oracle / SQL Server,并结合实现原理讲透。

作者 David更新于

序 · 那些「知道就是赚到」的 PostgreSQL 特性

很多人对 PostgreSQL 的认识,停留在「一个能替代 MySQL 的开源数据库」。这话没错,但也把它看小了。

PostgreSQL 真正的分量,在于它把一大堆别的数据库要么没有、要么得靠外部组件硬凑的能力,做成了内置的、一等公民的特性:半结构化文档(JSONB)、数组与范围类型、递归查询、窗口函数、全文检索、声明式分区、六种索引、原生发布订阅、可编程的过程语言、乃至把数据库直接当分布式锁用……这些拼在一起,让它从「关系数据库」长成了一个数据后端的瑞士军刀。

这个专栏做一件事:把这些特性一个一个拆开,讲清楚它是什么、底下怎么实现的、比别的库强在哪、什么时候该用它。

不是背文档,是「见真章」

市面上讲 PostgreSQL 特性的文章不少,但大多是文档的搬运:把语法抄一遍,给个最简例子,就算讲完了。本专栏不这么干——

本专栏的每一个特性,都来自一套在真实 PostgreSQL 18.4 实例上跑通的测试(托管于 Neon,ap-southeast-1)。共 19 项特性,全部通过。你在文里看到的每一段 SQL 输出,都是那次实测真实打印出来的结果,不是我编的。

这样带来的好处是:我们不只是告诉你「PostgreSQL 支持 X」,而是把 X 跑起来,把输出摊在你面前,再回头讲为什么是这个结果、数据库内部发生了什么。写法上沿用一贯的风格:SQL 在左,人话在右——先贴真实可跑的语句,再把它翻译成大白话,配上和别家数据库的对照。

横向对比,才知道「香」在哪

一个特性孤立地看,你很难体会它的价值。所以每一章都会回答同一个问题:这件事,换成 MySQL / Oracle / SQL Server / SQLite 会怎么做? 有的是「别家也有,但 PG 做得更彻底」,有的是「别家压根没有,得在应用层拿几百行代码模拟」。看完对比,你才会明白哪些是 PostgreSQL 真正的护城河。

跨库对比基于各数据库主流稳定版本的通行认知(如 MySQL 8.x、Oracle 19c+、SQL Server 2019+)。数据库演进很快,某个「别家没有」的结论可能随新版本变化;涉及关键决策时,请以你目标版本的官方文档为准。本专栏所有 PostgreSQL 行为以 PG 18 为基准。

路线图

我们按「从存什么、到怎么查、到怎么扛规模、再到怎么把逻辑放进库里」这条线,分六站走:

第一站 · 类型系统:PG 的看家本领 —— PostgreSQL 最不一样的地方,是它的类型多到离谱且都能参与索引与约束。丰富数据类型、数组、JSONB、范围类型与生成列,让「数据库」和「文档库」的界限在这里模糊掉。

第二站 · 查询表达力:一条 SQL 能走多远 —— CTE 与递归查询、窗口函数、LATERAL、GROUPING SETS、全文检索。这些让很多「以为得写代码循环」的活,一条 SQL 就干完了。

第三站 · 规模与性能:大表怎么活得好 —— 六种索引怎么选、声明式分区怎么把大表拆小、物化视图怎么把慢查询预计算掉,以及用 EXPLAIN 读懂查询计划——排查慢查询的第一手段。

第四站 · 过程、事件与并发:把逻辑放进库里 —— PL/pgSQL 与触发器把业务逻辑下沉到数据库、LISTEN/NOTIFY 让数据库直接当消息总线、咨询锁与 SKIP LOCKED 让它兼任分布式锁和任务队列。

第五站 · 生态 —— CREATE EXTENSION 一句话,给数据库装上模糊搜索、加密、地理空间等能力。PostgreSQL 的扩展机制,是它长盛不衰的关键。

第六站 · 收尾 —— 把 19 个特性收拢成一张「PostgreSQL 到底强在哪」的总表,并给出务实的选型建议:什么场景该上 PG,什么场景别硬上。

读之前,你最好有

  • 会基本 SQL:SELECT / JOIN / GROUP BY / 建表建索引看得懂就行,不需要是 DBA。
  • 用过任意一个关系数据库:MySQL、SQLite 都行——有对照,才有「原来还能这样」的惊喜。
  • 一颗愿意「多问一句为什么」的好奇心:很多特性你可能听过名字,但「它底下到底怎么实现的、代价在哪」才是这个专栏想补上的那一层。

准备好了,我们从 PostgreSQL 最标志性的地方开始——它那套多到离谱的数据类型:丰富数据类型:类型即一等公民。

本页目录