- PostgreSQL介绍
- 深入解析PostgreSQL的数据类型
- JavaScript在PostgreSQL中创建和应用存储过程
- PostgreSQL 从零到精通学习大纲
- PostgreSQL 概述
- PostgreSQL 安装部署
- 客户端工具与基本使用
- PostgreSQL 核心架构
- SQL 基础 - DDL 数据定义语言
- SQL 基础 - DML 数据操作语言
- 高级查询与数据分析
- PostgreSQL 数据类型详解
- 高级数据类型应用实战
- 数据库设计理论 - 规范化与反规范化
- 索引设计与优化策略
PostgreSQL 概述
class PostgreSQL,数据库一、PostgreSQL 历史与发展
1. 起源:加州大学伯克利的 POSTGRES 项目(1986-1994)
PostgreSQL 的故事始于 1986 年的加州大学伯克利分校。由数据库领域泰斗 Michael Stonebraker 教授领导的团队,在 DARPA(美国国防高级研究计划局)、陆军研究办公室、国家科学基金会等机构的资助下,启动了 POSTGRES 项目。
项目目标是开发一个超越当时传统数据库系统的下一代对象-关系型数据库,主要解决以下问题:
- 支持复杂的数据类型和对象关系
- 提供规则系统,实现主动数据库功能
- 简化存储管理,支持多种存储方式
关键里程碑:
- 1987年:第一个"演示性"系统投入使用
- 1989年6月:Version 1 发布给外部用户
- 1990年6月:Version 2 发布,重新设计了规则系统
- 1991年:Version 3 发布,增加了多存储管理器支持
- 1993年:外部用户数量翻倍,项目维护压力增大
- 1994年:伯克利 POSTGRES 项目在 Version 4.2 后正式终止
2. 转型:Postgres95 时代(1994-1996)
1994年,伯克利的研究生 Andrew Yu 和 Jolly Chen 为 POSTGRES 添加了 SQL 语言解释器,取代了原有的 PostQUEL 查询语言。这个新版本被命名为 Postgres95,并正式以开源形式发布到互联网。
Postgres95 的主要改进:
- 代码完全采用 ANSI C 重写,代码量缩减 25%
- 性能相比 POSTGRES 4.2 提升 30-50%
- 引入 psql 命令行工具(支持 GNU Readline)
- 移除实例级规则系统,保留重写规则
3. 正名:PostgreSQL 的诞生与成长(1996-至今)
1996年,项目团队意识到 "Postgres95" 这个名称不足以体现其与原始 POSTGRES 项目和 SQL 能力的关联,于是正式更名为 PostgreSQL。版本号从 6.0 开始重新编号,以延续伯克利项目的序列。
版本演进的关键里程碑:
| 时期 | 版本 | 关键特性 |
|---|---|---|
| 奠基期 | 6.0-7.4 (1996-2003) | 外键约束、WAL预写日志、MVCC、模式支持、PL/pgSQL |
| 企业就绪期 | 8.0-8.4 (2005-2009) | 原生Windows支持、表空间、PITR、全文搜索、HOT技术 |
| 功能爆发期 | 9.0-9.6 (2010-2016) | 流复制、热备、JSON支持、逻辑复制、BRIN索引 |
| 成熟创新期 | 10-13 (2017-2020) | 原生分区表、并行查询、JIT编译、增量排序 |
| 现代增强期 | 14-18 (2021-至今) | JSON_TABLE、VACUUM优化、异步I/O、UUIDv7 |
4. 当今地位
根据 DB-Engines 2025年5月的排名,PostgreSQL 以 674.32分 位列全球数据库第四,月度得分逆势增长 7.07分,是前四名中唯一保持正增长的数据库。开发者社区规模已突破 100万人,全球有超过 50% 的国产数据库基于 PostgreSQL 二次开发。
二、特性与优势
1. 开源与许可优势
PostgreSQL 采用 PostgreSQL 许可证,这是一种类似 BSD/MIT 的宽松开源许可证。这意味着:
- 完全免费:无需支付任何许可费用,无论是私有使用、商业应用还是学术研究
- 自由修改:可以任意修改源代码,满足特定业务需求
- 自由分发:可以将修改后的版本重新分发
- 无供应商锁定:不被任何单一公司控制,有众多商业支持厂商可供选择
2. ACID 合规性
PostgreSQL 完全符合 ACID 标准,确保事务处理的可靠性:
| 特性 | 说明 |
|---|---|
| 原子性 | 事务中的所有操作要么全部成功,要么全部失败 |
| 一致性 | 事务执行前后,数据库从一个有效状态转换到另一个有效状态 |
| 隔离性 | 使用 MVCC 实现,并发事务互不干扰 |
| 持久性 | 通过 WAL 预写日志确保系统故障后数据不丢失 |
3. 扩展性架构
PostgreSQL 以"可扩展性"著称,允许用户在几乎所有层面进行扩展:
可扩展的组件:
- 数据类型:支持自定义数据类型
- 函数与操作符:可添加自定义函数和操作符
- 聚合函数:可定义自定义聚合
- 索引方法:支持创建新的索引访问方法(B-Tree、GiST、GIN、BRIN 等)
- 过程语言:支持 PL/pgSQL、PL/Python、PL/Perl、PL/Java 等多种语言
扩展生态系统:
- PostGIS:地理空间数据处理,全球最强大的开源 GIS 数据库扩展
- pgvector:向量相似度搜索,支持 AI 语义搜索
- pg_stat_statements:查询性能监控
- uuid-ossp:UUID 生成
- pgcrypto:加密函数
- 全文搜索:内置的全文检索引擎
4. 高级数据类型支持
PostgreSQL 支持远超传统关系型数据库的丰富数据类型:
基础类型:
- 数值类型(整数、浮点数、精确数值 NUMERIC)
- 字符类型(CHAR、VARCHAR、TEXT)
- 日期时间类型(DATE、TIME、TIMESTAMP、INTERVAL)
- 布尔类型、二进制类型 BYTEA
高级类型:
- JSON/JSONB:原生 JSON 支持,JSONB 支持高效索引和查询
- 数组:支持一维和多维数组
- 范围类型:int4range、daterange、tsrange 等
- 几何类型:POINT、LINE、POLYGON、CIRCLE 等
- 网络地址类型:INET、CIDR、MACADDR
- 复合类型:类似结构体的自定义类型
- XML:原生 XML 支持
5. 并发控制:MVCC
PostgreSQL 通过 多版本并发控制(MVCC) 实现高效的并发处理:
MVCC 的核心机制:
- 写操作不阻塞读操作,读操作也不阻塞写操作
- 每个事务看到的是数据的一个快照(Snapshot)
- 更新操作创建新的数据版本,而非覆盖原有数据
- 旧版本数据由 VACUUM 机制定期清理
优势:
- 高并发场景下性能优异
- 避免读锁和写锁的冲突
- 支持完整的 ACID 隔离级别
6. 数据可靠性与高可用
WAL 预写日志:
- 所有修改先写入 WAL 日志,再写入数据文件
- 崩溃恢复时可以重放日志,确保数据不丢失
复制与高可用:
- 流复制:主从异步/同步复制
- 逻辑复制:表级粒度的复制
- 级联复制:从节点可向下传递数据
- PITR:时间点恢复功能
备份能力:
- 物理备份(pg_basebackup)
- 逻辑备份(pg_dump/pg_dumpall)
- 支持在线热备
7. SQL 标准兼容性
PostgreSQL 拥有业界最高的 SQL 标准符合度之一:
支持的 SQL 特性:
- 完整的 SQL:2016 核心特性
- 复杂查询(子查询、CTE、递归查询)
- 窗口函数
- 外键约束、检查约束、唯一约束
- 视图与物化视图
- 触发器和存储过程
- 事务和保存点
三、与其他数据库的对比
1. PostgreSQL vs MySQL
| 对比维度 | PostgreSQL | MySQL |
|---|---|---|
| 开源协议 | PostgreSQL 许可证(BSD 风格),完全自由 | GPL + 商业许可证,Oracle 拥有商业版本 |
| ACID 合规 | 完全符合 ACID | 仅 InnoDB/NDB 存储引擎符合 |
| SQL 标准兼容 | 几乎完全符合 SQL 标准 | 部分兼容 |
| 并发控制 | MVCC,读写互不阻塞 | InnoDB 使用行锁和 MVCC |
| 数据类型 | 丰富(JSONB、数组、几何、范围等) | 基础类型为主 |
| 扩展性 | 高度可扩展(自定义类型、函数、索引) | 扩展能力有限 |
| 存储引擎 | 单一存储架构 | 多存储引擎(InnoDB、MyISAM 等) |
| 性能特点 | 复杂查询、分析场景优秀 | 简单读写、高并发场景优秀 |
| 复制 | 物理复制 + 逻辑复制 | 主从复制为主 |
| 适用场景 | 复杂业务、数据分析、地理信息 | Web 应用、互联网公司、快速原型 |
2. PostgreSQL vs Oracle
| 对比维度 | PostgreSQL | Oracle |
|---|---|---|
| 成本 | 免费开源 | 商业软件,高昂许可费用 |
| 供应商锁定 | 无锁定,可自由选择服务商 | 强供应商锁定 |
| 性能 | 优秀,适合大多数场景 | 极高,针对企业级负载优化 |
| 安全性 | 高级安全功能(RLS、SSL) | 业界顶级安全方案 |
| 高可用 | 流复制、Patroni、Pgpool | Data Guard、RAC |
| 可扩展性 | 水平扩展(Citus)、垂直扩展 | 垂直扩展为主 |
| 企业功能 | 功能完善,多数场景足够 | 极丰富的企业级功能集 |
| 市场份额 | 快速增长 | 稳居第一但增长乏力 |
| 适用场景 | Oracle 替代首选、金融、政府 | 大型企业、关键任务系统 |
3. PostgreSQL vs SQL Server
| 对比维度 | PostgreSQL | SQL Server |
|---|---|---|
| 平台 | 全平台支持(Linux、Windows、macOS) | 主要优化 Windows 生态 |
| 成本 | 免费开源 | 需授权费用 |
| 生态集成 | 开放生态 | 与微软产品深度集成(Power BI、Azure) |
| 数据分析 | 功能完善,可扩展 | 内置强大 BI 功能 |
| 开源社区 | 全球社区,活跃度高 | 微软主导 |
| 云策略 | 多云友好 | 主打 Azure |
| 适用场景 | 开放技术栈、多云部署 | Windows 技术栈、微软生态企业 |
4. 对比总结表
| 特性 | PostgreSQL | MySQL | Oracle | SQL Server |
|---|---|---|---|---|
| 开源 | ✅ 完全开源 | ⚠️ 开源+商业 | ❌ 商业 | ❌ 商业 |
| ACID 合规 | ✅ 完全 | ⚠️ 部分引擎 | ✅ 完全 | ✅ 完全 |
| SQL 标准 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 扩展性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 数据类型 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 成本 | 免费 | 免费/付费 | 极高 | 高 |
| 学习曲线 | 中陡 | 平缓 | 陡峭 | 中 |
| 社区/生态 | 活跃开源 | 非常活跃 | 企业支持 | 企业支持 |
| 性能-简单查询 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 性能-复杂查询 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 高并发 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
四、适用场景
1. 理想使用场景
- ✅ 复杂业务系统:ERP、CRM、金融交易系统
- ✅ 数据分析与报表:OLAP、数据仓库、商业智能
- ✅ 地理信息系统(GIS):结合 PostGIS 扩展
- ✅ 移动应用和 Web 应用:需要 JSON 支持和高并发
- ✅ Oracle 替代项目:从商业数据库迁移
- ✅ 需要数据完整性的系统:银行、医疗、保险
- ✅ 多语言开发环境:支持主流编程语言
2. 相对较弱的场景
- ⚠️ 极简单的键值存储:Redis 或 Memcached 更合适
- ⚠️ 纯只读的极简单查询:MySQL 可能更轻量
- ⚠️ 已有深度 Oracle/SQL Server 技术栈的企业:迁移成本较高
五、市场趋势
PostgreSQL 是目前增长最快的数据库之一,主要驱动力包括:
- Oracle 替代趋势:企业为降低成本,从 Oracle 迁移到 PostgreSQL
- 云原生发展:AWS RDS、Google Cloud SQL、Azure Database 等云服务广泛支持
- AI 与 JSON 需求:pgvector 支持向量搜索,JSONB 支持半结构化数据
- 国产数据库基础:半数国产数据库基于 PostgreSQL 开发
- 活跃的社区:全球超过 100 万开发者,持续贡献新特性