PostgreSQL 简介与定位
本教程共 50 篇 · 第 1 篇 · 更新于 2026-07-31 · 约 7 分钟阅读
1. PostgreSQL 简介与定位
本节目标:读完你能说清楚 PostgreSQL 是什么、它适合干什么,以及它和 MySQL 到底差在哪。
很多新手第一次听到 PostgreSQL,会把它当成又一个「MySQL 同类」。其实它确实和 MySQL 一样是关系型数据库,但定位又不太一样。这一章带你从零认识它,不需要任何前置基础。
数据库到底是什么
先说最底层的概念。数据库(Database)就是用来存放数据的仓库。我们日常也可以把数据写进文件,但文件读写慢,而且很难做「按条件快速查找」「多人同时改」这类操作。
专门干这事的软件叫数据库管理系统(DBMS,Database Management System)。建立在「关系模型」之上的,就叫关系型数据库(RDBMS,Relational Database Management System)。说白了,它用「表」来组织数据——表由行(一条记录)和列(一个字段)组成,就像一张 Excel 表。
NotePostgreSQL 官方英文名叫 post-gress-Q-L,常被大家简称为 Postgres。下文我都用 Postgres 来称呼它,两个词指的是同一个东西。
PostgreSQL 是什么
PostgreSQL 是一个开源的对象关系型数据库(ORDBMS,Object-Relational Database Management System)。它最早源自加州大学伯克利分校的 POSTGRES 项目,由 Michael Stonebraker 教授主导,从 1986 年开始研发。1996 年项目改名为 PostgreSQL,并沿用至今。
「对象关系型」这几个字怎么理解?传统关系型数据库只能存整数、字符串这类基础类型。Postgres 在关系模型之上,又加进了面向对象的一些能力:你可以自定义数据类型、定义表之间的继承关系、直接存 JSON 和数组。
所以它的口号是「世界上最先进的开源关系型数据库」。这不是吹牛,后面你会慢慢体会到它的「先进」体现在哪。本书全程以 PostgreSQL 18(18.4,2026 年 5 月发布)为准,所有示例都基于这个版本。
TipPostgreSQL 的版本号是「大版本.小版本」。18 是大版本,18.4 是第 4 个小版本(修 bug 和补安全补丁用)。大版本之间功能差别大,小版本只是修修补补,可以放心升级小版本。
「对象关系型」到底多了一层什么
理解这一点,能帮你看懂后面很多高级功能。普通关系型数据库里,一张表长得像 Excel:每行是同种结构的记录。Postgres 在此基础上允许你:
- 自定义类型(Composite Type):把「省、市、详细地址」打包成一个 address 类型,表里的列就能直接是 address。
- 表继承(Inheritance):一张「首都表」可以继承「城市表」,查城市表时会自动带上首都。
- 数组与 JSON:一列里能直接放一个数组,或者一整段 JSON 文档。
- 扩展插件:通过
CREATE EXTENSION挂上别人写好的功能,比如 PostGIS 处理地理数据。
这些事在纯关系型数据库里要么做不了,要么要绕很大弯。Postgres 把它们做成一等公民,这就是「对象关系型」的含金量。
核心特点
为什么那么多人喜欢 Postgres?我挑几个对初学者最有感的点讲。
开源且自由。 它使用类 MIT 的宽松许可证,可以免费用在商业项目里,不用担心授权费用,也不用怕哪天被收费。
高度兼容标准 SQL。 它实现了绝大多数 SQL 标准(以 PostgreSQL 18 为准)。你学的 SQL 语法,换到其他数据库也大多能直接用。
Tip如果你以后要面试或者换数据库,Postgres 上练出来的 SQL 功底,在 Oracle、SQL Server 上基本都能迁移,因为它是「最像标准」的那个。
可扩展性强。 这是它最被老用户津津乐道的地方。你可以自己写函数(支持 PL/pgSQL、Python、C 等)、自定义数据类型、加扩展插件。全文检索、地理信息都能原生或通过扩展支持。
数据可靠性高。 它用多版本并发控制(MVCC,Multiversion Concurrency Control)来处理多人同时读写:每个人看到的是自己事务开始时的数据快照,写操作互不干扰。再配合预写日志(WAL,Write-Ahead Log),哪怕机器突然断电,重启后数据也不会乱。
NoteMVCC 的好处是「读不阻塞写、写不阻塞读」。这也是为什么高并发场景下 Postgres 表现稳。代价是旧数据需要定时清理(叫 VACUUM),这块后面进阶章节会讲。
类型丰富。 除了整数、字符串、时间这类常规类型,它还原生支持 JSON/JSONB、数组、UUID、网络地址(inet)、枚举等。一个数据库就能同时干关系型和部分「文档数据库」的活。
事务保证(ACID)。 它的事务满足原子性、一致性、隔离性、持久性。简单说,一组操作要么全成功要么全失败,不会卡在半路留下脏数据。
一个 PostgreSQL 实例能装多少东西
很多人分不清「实例」「数据库」「模式」这几个词,这里先点一下,后面章节会细讲。
- 集群(Cluster):一个 Postgres 服务进程管理的整体,里面可以有很多个数据库。
- 数据库(Database):互相隔离的数据空间,库与库之间默认看不到彼此的表。
- 模式(Schema):库内部的命名空间,用来给表分类。
你装好 Postgres,就拥有了一个集群;里面默认有几个系统库;库里默认有个 public 模式。这套层级关系,是后面所有操作的地基。
适用场景
Postgres 能扛的活很广,举几个典型:
- 业务系统后台:电商订单、用户中心这类需要事务保证的系统。
- 数据分析与报表:大数据量下的复杂统计查询。
- 地理信息(GIS):配合 PostGIS 做地图相关应用。
- Web 应用:几乎所有主流编程语言都有成熟的 Postgres 驱动。
- 需要存 JSON 又想要事务的场景:比如配置、日志、半结构化数据。
什么时候不一定要选它
说句实在话,没有「最好」的数据库,只有「最合适的」。
- 如果你是做极简单的个人小项目,只想「装好就能跑」,MySQL 或 SQLite 的入门门槛会更低一点。
- 如果你要的是海量键值读写、对事务没要求,Redis 这类 KV 存储更合适。
- 如果你的团队已经很熟某个数据库,没必要为了「先进」硬换。
Warning选数据库看的是项目需求,不是谁「更厉害」。Postgres 功能强,但概念也多一些。新手别被它的强大吓退,也别盲目神话它。
与 MySQL 的客观对比
下面这张表不吹不黑,把两者常被拿来做比较的点列出来。注意:本书基于 PostgreSQL 18,对比的是 MySQL 8.x。
| 对比点 | PostgreSQL 18 | MySQL 8.x |
|---|---|---|
| 定位 | 对象关系型、偏功能全面 | 关系型、偏易用和高吞吐 |
| 许可证 | 类 MIT 宽松许可 | GPL |
| 自增主键 | 推荐 GENERATED AS IDENTITY | AUTO_INCREMENT |
| 物化视图 | 支持 | 不支持 |
| 全文检索 | 原生支持 | 支持但能力有限 |
| 表继承 | 支持 | 不支持 |
| 自定义类型 | 支持 | 基本不支持 |
| 存储引擎 | 单一 | 可多选(如 InnoDB) |
| 布尔类型 | 原生 BOOLEAN | 内部用 TINYINT(1) 模拟 |
你看,Postgres 在「高级功能」上确实更厚实,但 MySQL 胜在简单、生态广。选哪个,看项目需求,而不是谁「更厉害」。
本书的学习路线
从下一章开始,我们会按这个顺序走:先装好环境(第 2 章),学会用命令行 psql 和图形工具 pgAdmin(第 3、4 章),再建库、建模式、建表(第 5–8 章)。把地基打牢后,才会进入类型、增删改查、约束、索引这些核心内容。
小结
PostgreSQL 是一个开源、标准兼容、可扩展又可靠的对象关系型数据库。它适合对数据完整性和功能丰富度有要求的场景。理解了这些,下一章我们就来把它装到电脑上。