Skip to content

第九章 PostgreSQL 详解


1. PostgreSQL 概述与特性

PostgreSQL 是一个功能强大的开源对象-关系数据库系统(ORDBMS),在灵活的 BSD 许可证下发行。PostgreSQL 的发音为 "post-gress-Q-L",其口号是"世界上最先进的开源关系型数据库"。它在 SQL 标准兼容性、数据类型丰富性、扩展能力等方面表现突出,被广泛应用于企业级应用、地理信息系统、科学计算和数据分析领域。

1.1 发展历程

PostgreSQL 源自加州大学伯克利分校的 POSTGRES 项目,由 Michael Stonebraker 教授领导开发。1996 年更名为 PostgreSQL,以体现对 SQL 的支持。经过三十余年的发展,PostgreSQL 形成了活跃的开源社区,每年发布主版本,持续增强功能与性能。

1.2 核心特性

  • 标准兼容:高度遵循 SQL 标准,支持窗口函数、CTE、递归查询、JSON 等现代特性。
  • 丰富的数据类型:除基本类型外,支持数组、JSON/JSONB、范围类型、几何类型、全文检索类型等。
  • 扩展机制:通过 Extension 可加载 PostGIS(地理信息)、pg_trgm(模糊匹配)等扩展。
  • MVCC 并发控制:多版本并发控制,读写不阻塞,高并发场景下表现优异。
  • 可编程性:支持存储过程、触发器、自定义函数,内置 PL/pgSQL 等过程语言。

PostgreSQL 常被很多工程师视为“更完整的关系数据库”,原因并不只是它功能多,而是它在设计取向上更强调语义表达、标准兼容和体系完整性。它通常不满足于只做一个高效的增删改查工具,而更愿意把数据库建设成一个既能严格表达关系结构、又能承载复杂查询和扩展能力的平台。理解这种取向后,再看 PostgreSQL 的数据类型、扩展机制、执行计划和治理能力,就更容易把它们连成一条主线,而不是当成零散特性去记。

1.3 ORDBMS 术语

PostgreSQL 作为对象-关系数据库,在关系模型基础上增加了面向对象能力:

  • 数据库:关联对象的集合。
  • :数据的矩阵,对应关系模型中的关系。
  • :一组相关数据,对应元组或记录。
  • :相同类型的数据元素。
  • 主键:唯一标识行的列或列组合。
  • 外键:关联两表的引用完整性约束。
  • 索引:加速数据访问的结构。

2. PostgreSQL 安装与配置

2.1 安装方式

  • Linux:使用发行版包管理器(如 apt install postgresqlyum install postgresql-server)或官方源。
  • Windows:下载官方安装程序,按向导完成安装。
  • macOSbrew install postgresql 或使用 Postgres.app。
  • Dockerdocker run -d -p 5432:5432 -e POSTGRES_PASSWORD=mypass postgres

2.2 连接与基础命令

bash
# 命令行连接(默认使用当前系统用户)
psql -U postgres -d postgres

# 指定主机和端口
psql -h localhost -p 5432 -U postgres -d mydb

连接后的常用命令:

sql
\l          -- 列出所有数据库
\c dbname   -- 切换数据库
\dt         -- 列出当前数据库的表
\d tablename -- 查看表结构
\q          -- 退出

psql 这类命令行工具在教材里看上去只是操作入口,实际上它也是理解 PostgreSQL 对象体系的最好窗口。通过系统命令查看数据库、模式、表、索引和函数,读者会更直观地感受到 PostgreSQL 并不是一堆分散的表,而是一个由数据库、Schema、对象权限、统计信息和系统目录共同组成的完整系统。很多概念若只停留在建表语句里,会显得抽象;放到实际命令行环境中观察,就容易建立整体感。


3. 数据库与模式

3.1 创建与删除数据库

3.2 模式 (Schema)

4. 数据类型与表操作

4.1 常用数据类型

4.2 创建表

4.3 修改表

5. 数据操纵 (DML)

5.1 插入、更新、删除

5.2 插入冲突处理 (ON CONFLICT)

6. 查询进阶

6.1 基本查询

6.2 高级特性

6.3 窗口函数

6.4 CTE 与递归查询

7. JSON 与全文检索

7.1 JSON 类型

7.2 全文检索

8. 约束、索引与视图

8.1 约束

8.2 索引

8.3 视图

9. 触发器与存储过程

9.1 触发器

9.2 存储过程与函数

10. 事务、锁与并发控制

10.1 事务

10.2 隔离级别

10.3 锁

11. 权限与安全

11.1 角色与用户

11.2 行级安全 (RLS)

12. 备份、恢复与维护

12.1 逻辑备份

12.2 维护

13. PostgreSQL 与 MySQL 的选型对比