PostgreSQL 从入门到实战|Java 程序员的进阶关系数据库课程
为什么要学 PostgreSQL?
MySQL 是全球最流行的开源关系库,但当你遇到下面这些需求时,PostgreSQL(下称 PG)往往是更强的答案:
- 想要真正的类型系统:JSONB(可索引的二进制 JSON)、数组、UUID、网络地址、几何/地理类型一个库全占;
- 需要复杂查询:窗口函数、CTE、
LATERAL、GROUPING SETS、全文检索、部分/表达式/覆盖索引,PG 支持得更完整更早; - 看重标准与扩展性:忠实遵循 SQL 标准、可插拔扩展生态(PostGIS 地理、pg_trgm 模糊匹配、TimescaleDB 时序);
- 从 MySQL 平滑迁移:PG 的 MySQL 兼容模式工具链成熟,且很多「MySQL 8 才补齐的能力」PG 早就有了。
PG 被称为「最像商业数据库的开源数据库」:功能密度、扩展性、严谨性都很高。对已经会 Java、会 MySQL 的人来说,走「对照迁移」路线学 PG 是最省力的——大部分概念换个名字就会了,真正要记住的是少数几处关键差异。
本课程参考 PostgreSQL 官方文档 的知识体系重新组织(官方文档为英文,本教程用中文精编),所有示例用 Java 代码书写(官方 pgJDBC 42.7.x + Spring Boot + MyBatis-Plus),每个概念都给出 MySQL 对照。
⚠️ 一条先入为主的铁律:PG 里未加引号的标识符会被折叠成小写(
CREATE TABLE T_User实际建成t_user)。这和你可能见过的达梦「自动转大写」正好相反,是全课程反复要小心的点,第 1 章详解。
🎯 章节与学习目标总览
| 章节 | 主题 | 学完你将能够 |
|---|---|---|
| 第1章 | 认识 PostgreSQL 与环境搭建 | 说清 PG「实例→数据库→模式(schema)→表」层级与 MySQL 的差异;记住小写折叠铁律;完成 Windows/Docker 安装、psql 使用;Java 跑通首次连接 |
| 第2章 | SQL 基础(MySQL 对照) | 建库建表:用 SERIAL/IDENTITY 替代 AUTO_INCREMENT,用 TEXT/JSONB/数组/UUID;DML 与 INSERT...ON CONFLICT upsert;字符串/日期函数逐条翻译成 PG 写法 |
| 第3章 | 高级 SQL 与编程对象 | 用 CTE/窗口函数/LATERAL/GROUPING SETS 写复杂查询;视图与物化视图;PL/pgSQL 函数/存储过程/触发器与 MySQL 对照;:: 类型转换与扩展生态 |
| 第4章 | 事务、锁与 MVCC | 理解 PG 的快照隔离(xmin/xmax)、默认 RC;SELECT FOR UPDATE/SKIP LOCKED;事务 ID 回卷与 VACUUM;对照 InnoDB 间隙锁与 RR 的差异 |
| 第5章 | Java 集成实战 | 用 pgJDBC 完成增删改查与批处理;配 currentSchema/reWriteBatchedInserts/stringtype;JSONB/数组/UUID 的类型映射;MyBatis-Plus DbType.POSTGRE_SQL 与 Spring Boot 整合;常见报错清单 |
| 第6章 | 索引与性能优化 | 选择并创建 B-tree/GIN/GiST/BRIN/表达式/部分/覆盖索引;用 EXPLAIN (ANALYZE, BUFFERS) 读执行计划;ANALYZE 统计信息;MySQL 索引经验哪里复用、哪里要换思路 |
| 第7章 | MySQL 迁移与日常运维 | 做迁移评估与用 pgloader 搬数据;pg_dump/pgrestore 对照 mysqldump;角色体系与 pg_hba.conf 认证;autovacuum/备份/监控;进阶路线 |
🧭 建议学习路径
- 系统学习:按章节顺序。第 1~2 章建立手感并矫正 MySQL 惯性(约 2 天),第 3~4 章是 PG 的「能力上限」所在——高级查询与事务并发(约 4 天),第 5 章接入 Java 工程(约 2 天),第 6~7 章补性能与运维全景(约 3 天)。
- 急着写代码:第 1 章装好环境 → 直接第 5 章 pgJDBC/Spring 跑通 → 遇到语法回查第 2、3 章 → 上线前务必读第 4、6 章(MVCC 与索引最容易被 MySQL 思维带偏)。
- 面试/迁移导向:第 2 章类型与 upsert 差异、第 4 章 MVCC、第 6 章索引类型、第 7 章迁移是高频考点与实操重点,每章末尾都有 MySQL 对照速查表。
前置要求
本课程默认你:熟悉 MySQL 的 CRUD/索引/事务/主从概念;会用 Java + Maven + Spring Boot。PostgreSQL 从零讲起,不需要你有任何 PG 或 Oracle 基础。
🛠 配套环境
- 数据库:PostgreSQL 16/17(社区版免费,跨平台)
- Java 驱动:
org.postgresql:postgresql42.7.x(官方 pgJDBC,纯 Java Type-4) - 框架:Spring Boot 3.x + MyBatis-Plus 3.5.x(
DbType.POSTGRE_SQL)/ Spring Data JPA - 客户端工具:psql(官方命令行)、pgAdmin 4(GUI)、DBeaver(通用)
📚 站内的黄金搭档
- 关系型基础不牢?先刷 MySQL 从入门到精通
- 刚学完达梦?达梦数据库从入门到实战 与本课程可对照理解「MySQL 兼容模式」的不同实现
- 想同时补 NoSQL 视野?MongoDB 从入门到实战——PG 的 JSONB 正是「关系型对文档需求的回应」
- 手写 SQL 没处练?上 SQL 练习场
- 数据库面试高频题:Java 高频面试题·数据库篇
官方参考资料:PostgreSQL Documentation(英文)、pgJDBC。本课程是其「Java 程序员 + MySQL 背景视角」的中文精编实战版。
老师介绍
老苗一对一私教:https://yjoffer.com/aboutus/one2one/one2one.html
