主题
第九章 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、对象权限、统计信息和系统目录共同组成的完整系统。很多概念若只停留在建表语句里,会显得抽象;放到实际命令行环境中观察,就容易建立整体感。
