PostgreSQL 简介 #
什么是 PostgreSQL? #
PostgreSQL(简称 Postgres)是一个功能强大的开源对象关系型数据库管理系统(ORDBMS)。它以可靠性、功能强大和性能卓越而闻名于世,被广泛认为是世界上最先进的开源数据库。
text
┌─────────────────────────────────────────────────────────────┐
│ PostgreSQL 定位 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 类型:对象关系型数据库管理系统(ORDBMS) │
│ │
│ 特点: │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 开源免费 │ │ 功能强大 │ │ 高度可靠 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 标准兼容 │ │ 可扩展性 │ │ 社区活跃 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
发展历史 #
起源与演进 #
text
1986年 ─── POSTGRES 项目启动
│
│ 加州大学伯克利分校
│ Michael Stonebraker 教授主导
│ 继承 Ingres 数据库思想
│
1995年 ─── Postgres95 发布
│
│ 添加 SQL 支持
│ 开源发布
│
1996年 ─── PostgreSQL 6.0
│
│ 正式更名为 PostgreSQL
│ 社区驱动开发
│
2005年 ─── PostgreSQL 8.0
│
│ Windows 原生支持
│ 保存点、表空间
│
2010年 ─── PostgreSQL 9.0
│
│ 流复制、热备份
│ 64位 Windows 支持
│
2017年 ─── PostgreSQL 10
│
│ 声明式分区
│ 逻辑复制
│
2022年 ─── PostgreSQL 15
│
│ 性能大幅提升
│ MERGE 命令
│
2023年 ─── PostgreSQL 16
│
│ 并行查询增强
│ JSON 改进
│
至今 ─── 持续演进
版本命名规则 #
| 版本系列 | 说明 |
|---|---|
| 主版本 | 如 16.x,重大功能更新 |
| 次版本 | 如 16.1,Bug修复和安全更新 |
| 发布周期 | 每年发布一个主版本 |
核心特点 #
1. 标准兼容性 #
text
┌─────────────────────────────────────────────────────────────┐
│ SQL 标准兼容 │
├─────────────────────────────────────────────────────────────┤
│ │
│ PostgreSQL 高度兼容 SQL 标准: │
│ │
│ ✅ SQL:2016 标准大部分特性 │
│ ✅ 完整的 ACID 事务支持 │
│ ✅ 存储过程和函数 │
│ ✅ 触发器和视图 │
│ ✅ 外键约束 │
│ ✅ 子查询和连接 │
│ │
│ 独特优势: │
│ ✅ 支持复杂查询 │
│ ✅ 窗口函数 │
│ ✅ 公用表表达式(CTE) │
│ ✅ 递归查询 │
│ │
└─────────────────────────────────────────────────────────────┘
2. 丰富的数据类型 #
text
┌─────────────────────────────────────────────────────────────┐
│ 数据类型支持 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 基础类型: │
│ ├── 整数:smallint, integer, bigint │
│ ├── 浮点:real, double precision │
│ ├── 定点:numeric, decimal │
│ ├── 字符:char, varchar, text │
│ ├── 布尔:boolean │
│ └── 日期:date, time, timestamp, interval │
│ │
│ 高级类型: │
│ ├── JSON:json, jsonb │
│ ├── 数组:integer[], text[] │
│ ├── 几何:point, line, polygon │
│ ├── 网络:inet, cidr, macaddr │
│ ├── UUID:uuid │
│ ├── XML:xml │
│ └── 范围:int4range, daterange │
│ │
│ 自定义类型: │
│ ├── 复合类型 │
│ ├── 枚举类型 │
│ └── 域类型 │
│ │
└─────────────────────────────────────────────────────────────┘
3. MVCC 多版本并发控制 #
text
┌─────────────────────────────────────────────────────────────┐
│ MVCC 机制 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 传统锁机制问题: │
│ ❌ 读操作阻塞写操作 │
│ ❌ 写操作阻塞读操作 │
│ ❌ 并发性能差 │
│ │
│ MVCC 解决方案: │
│ │
│ ┌─────────┐ ┌─────────┐ │
│ │ 事务A │ │ 事务B │ │
│ │ (读取) │ │ (写入) │ │
│ └────┬────┘ └────┬────┘ │
│ │ │ │
│ │ 读取旧版本数据 │ 创建新版本 │
│ │ 不阻塞 │ 不阻塞读取 │
│ │ │ │
│ └──────────────────────────┘ │
│ │
│ 优势: │
│ ✅ 读写互不阻塞 │
│ ✅ 高并发性能 │
│ ✅ 一致性读 │
│ │
└─────────────────────────────────────────────────────────────┘
4. 高度可扩展 #
text
┌─────────────────────────────────────────────────────────────┐
│ 可扩展性 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 扩展类型: │
│ │
│ 1. 数据类型扩展 │
│ - 自定义复合类型 │
│ - 枚举类型 │
│ - 域类型 │
│ │
│ 2. 函数扩展 │
│ - 自定义函数 │
│ - 聚合函数 │
│ - 窗口函数 │
│ │
│ 3. 操作符扩展 │
│ - 自定义操作符 │
│ - 操作符类 │
│ │
│ 4. 索引扩展 │
│ - B-tree, Hash, GiST, SP-GiST, GIN, BRIN │
│ │
│ 5. 过程语言 │
│ - PL/pgSQL(内置) │
│ - PL/Python │
│ - PL/Perl │
│ - PL/Tcl │
│ - PL/Java │
│ │
└─────────────────────────────────────────────────────────────┘
与其他数据库对比 #
PostgreSQL vs MySQL #
| 特性 | PostgreSQL | MySQL |
|---|---|---|
| 许可证 | PostgreSQL License | GPL / 商业许可 |
| 数据类型 | 更丰富(数组、JSON、几何) | 基础类型 |
| JSON支持 | 原生JSON/JSONB | JSON支持 |
| 全文搜索 | 内置 | 需要引擎支持 |
| 窗口函数 | 完整支持 | 部分支持 |
| 递归查询 | 支持 | 支持 |
| 索引类型 | 多种(B-tree, GiST, GIN等) | B-tree, Hash, Full-text |
| 复制 | 物理+逻辑复制 | 主从复制 |
| 扩展性 | 高度可扩展 | 有限扩展 |
| 适用场景 | 复杂查询、数据分析 | Web应用、简单事务 |
PostgreSQL vs Oracle #
| 特性 | PostgreSQL | Oracle |
|---|---|---|
| 许可证 | 开源免费 | 商业许可 |
| 成本 | 免费 | 高昂 |
| 功能 | 企业级功能 | 企业级功能 |
| 性能 | 优秀 | 优秀 |
| 社区 | 活跃开源社区 | 官方支持 |
| 学习曲线 | 中等 | 较陡 |
| 适用场景 | 中大型项目 | 大型企业 |
应用场景 #
1. Web 应用后端 #
text
┌─────────────────────────────────────────────────────────────┐
│ Web 应用架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 前端 │ ──> │ 后端 │ ──> │PostgreSQL│ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ 适用场景: │
│ ✅ 用户管理系统 │
│ ✅ 内容管理系统(CMS) │
│ ✅ 电商系统 │
│ ✅ 社交平台 │
│ │
└─────────────────────────────────────────────────────────────┘
2. 数据分析 #
text
┌─────────────────────────────────────────────────────────────┐
│ 数据分析场景 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 数据仓库: │
│ ├── 大规模数据存储 │
│ ├── 复杂聚合查询 │
│ ├── 窗口函数分析 │
│ └── 报表生成 │
│ │
│ 实时分析: │
│ ├── 物化视图 │
│ ├── 流式数据处理 │
│ └── 实时仪表盘 │
│ │
└─────────────────────────────────────────────────────────────┘
3. 地理信息系统(GIS) #
text
┌─────────────────────────────────────────────────────────────┐
│ GIS 应用 │
├─────────────────────────────────────────────────────────────┤
│ │
│ PostGIS 扩展: │
│ │
│ ├── 空间数据存储 │
│ │ - 点、线、多边形 │
│ │ - 地理坐标 │
│ │ │
│ ├── 空间查询 │
│ │ - 距离计算 │
│ │ - 范围查询 │
│ │ - 空间关系 │
│ │ │
│ └── 应用场景 │
│ - 地图应用 │
│ - 位置服务 │
│ - 物流配送 │
│ │
└─────────────────────────────────────────────────────────────┘
4. 微服务架构 #
text
┌─────────────────────────────────────────────────────────────┐
│ 微服务数据存储 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │ 用户服务 │ │ 订单服务 │ │ 商品服务 │ │
│ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │PostgreSQL │ │PostgreSQL │ │PostgreSQL │ │
│ │ 用户库 │ │ 订单库 │ │ 商品库 │ │
│ └───────────┘ └───────────┘ └───────────┘ │
│ │
│ 每个服务独立数据库,支持不同业务需求 │
│ │
└─────────────────────────────────────────────────────────────┘
谁在使用 PostgreSQL #
知名企业用户 #
| 公司 | 使用场景 |
|---|---|
| 社交网络数据存储 | |
| Spotify | 音乐元数据管理 |
| 社区数据存储 | |
| Apple | 后端服务支持 |
| Fujitsu | 企业解决方案 |
| Skype | 通信数据存储 |
PostgreSQL 生态系统 #
官方工具 #
| 工具 | 用途 |
|---|---|
| psql | 命令行客户端 |
| pg_dump | 备份工具 |
| pg_restore | 恢复工具 |
| pgAdmin | 图形化管理工具 |
| pg_basebackup | 基础备份工具 |
| pg_upgrade | 版本升级工具 |
流行扩展 #
| 扩展 | 功能 |
|---|---|
| PostGIS | 地理空间数据支持 |
| pg_stat_statements | SQL统计 |
| pg_trgm | 相似度搜索 |
| hstore | 键值存储 |
| citus | 分布式扩展 |
| TimescaleDB | 时序数据 |
学习路径 #
text
入门阶段
├── PostgreSQL简介(本文)
├── 安装与配置
├── 基础语法
└── 数据类型
基础阶段
├── 数据库操作
├── 表操作
├── 数据CRUD
└── 基础查询
进阶阶段
├── 高级查询
├── 多表查询
├── 索引优化
└── 事务处理
下一步 #
现在你已经了解了 PostgreSQL 的基本概念,接下来学习 安装与配置,开始动手实践吧!
最后更新:2026-03-29