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 postgresql、yum install postgresql-server)或官方源。
  • Windows:下载官方安装程序,按向导完成安装。
  • macOS:brew install postgresql 或使用 Postgres.app。
  • Docker:docker 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 的选型对比 ​