PostgreSQL 是什么
这一课你将能做到
- 用自己的话说明 PostgreSQL(常简称 PG)是什么,以及它和「通用 SQL」的关系
- 对照本站仍用 MySQL 8.0 的原因,说出学本 track 的真实用途(面试、云栈、JSONB 等)
- 在脑中画出「本站业务库 vs 本机实验 PG」两条线,知道它们互不替代
为什么要学
全栈路线图、云厂商文档、Supabase / Neon 一类产品,常默认或强烈推荐 PostgreSQL。你若只摸过 MySQL,遇到 JSONB、RETURNING、GENERATED … AS IDENTITY、逻辑复制时会突然卡住。
CodeRoadMap 生产库仍是 MySQL(jdbc:mysql://…/codeforge,表见 backend/src/main/resources/schema.sql)。本 track 不是要你立刻换库,而是用同一套「表 + SQL」思维,补上 PG 专精视角,方便对接路线图里的 PostgreSQL 节点。
人话:MySQL 是本站「正在跑的真相」;PG 是「你该会的另一种主流关系型引擎」。
先建立图像
学员浏览器
↓ HTTP /api
Spring Boot(本站)
↓ JDBC
MySQL 8 ←—— 生产 / 跟练 sql-essentials 的权威源
(cf_track、cf_lesson …)
你本机(本 track)
↓ Docker / psql
PostgreSQL 16 ←—— 实验库 codeforge_pg
练同一套模型的 PG 方言
| 维度 | PostgreSQL | MySQL 8(本站) |
|---|
| 引擎模型 | 单一内核,功能集中 | InnoDB 为主 |
| 半结构化 | JSONB + GIN 索引 | JSON 类型,索引能力较弱 |
| 扩展 | PostGIS、pgcrypto 等成熟 | 插件/生态更偏传统 OLTP |
| 复制 | 物理复制 + 逻辑复制 | 主从、Group Replication |
| 国内运维 | 增长快 | 文档与 DBA 经验更多 |
把两者想成「同一门语言的两种方言」:SELECT 大多相通;建表类型、布尔、自增、JSON 查询会分叉。
跟着做
步骤 1:确认你已具备 SQL 入门
打开 SQL 基础 的 sql-intro。用自己的话写下:表、主键、外键各是什么。
本课不要求本机已装 PG;先建立「为什么要学」的坐标系。
步骤 2:对照本站表结构
打开仓库 backend/src/main/resources/schema.sql,找到 cf_track / cf_lesson。记下:
- 课程路径靠
slug 对外暴露
- 课时靠
track_id 归属课程
- 时间字段、布尔/整型习惯是 MySQL 方言
下一课起,你会在 PG 里用相近概念、不同写法重建练习表。
步骤 3:列出三个「值得上 PG」的场景
在笔记里写三条,例如:
- 产品要把「标签 + 扩展配置」放进一列,还要按包含关系查(JSONB + )
@>
需要地理数据(PostGIS)或强标准 SQL / CTE / 窗口函数重度分析团队已选 Neon、Supabase、RDS PostgreSQL,本地必须对齐方言若三条都写不出,说明你目前场景更适合继续深挖 MySQL——也没关系,本 track 仍练通用能力。
步骤 4:分清「学」与「迁」
[学 PG] Docker 起实例 → psql → 练习 schema → 可选 Spring profile
[迁生产] 需要:迁移脚本、备份、双写/切换窗口、回滚预案(本 track 不要求)
本站 不会 因你学完本课就改 application.yml 指向 PG。实验与生产隔离,是安全跟练的底线。
步骤 5:在路线图里定位节点
打开 全栈路线图 与 SQL 路线图,找到 PostgreSQL 相关节点。用一句话写给自己:「这门课对应路线图哪一格,学完算勾掉什么。」
步骤 6:预习下一课环境
确认本机有 Docker(或计划用云托管 PG)。下一课用官方镜像 postgres:16 起库并用 psql 连上。MySQL 仍占 3306,PG 常用 5432,可并存。
讲清楚要点
- PostgreSQL 是开源对象-关系型数据库:以标准 SQL 兼容、丰富类型与 MVCC 事务著称;官方文档在 postgresql.org/docs。
- 与 MySQL 是「同族方言」不是「互为子集」:会 MySQL 能加速入门,但不能把
AUTO_INCREMENT、TINYINT(1)、反引号习惯原样粘贴进 PG。
- 本站权威数据源仍是 MySQL 8:教程主线、
schema.sql、Flyway 迁移都以 MySQL 为准;PG track 是能力扩展。
- JSONB / 数组 / UUID / timestamptz 是日常开发里最常感到「PG 不一样」的地方,后面几课会逐个练。
- 因为 Web API 读多写少、需要强约束与事务,所以 关系型仍是业务真相层;选 PG 还是 MySQL,看场景与团队,不看口号。
- 本地双库很常见:3306 跑业务跟练,5432 跑实验;命名练习库
codeforge_pg,避免和生产库名混淆。
你可能会懵的地方
-
「对象-关系」是不是 NoSQL?
不是。PG 仍是表、行、事务;「对象」指自定义类型、数组、复合类型等扩展,主干仍是关系模型。
-
SQL 基础 track 白学了吗?
没有。过滤、JOIN、聚合、事务概念直接迁移;本 track 补方言与特色能力。
-
为什么官方镜像叫 postgres 而产品名是 PostgreSQL?
历史命名:项目常简称 Postgres;镜像名 postgres,文档写 PostgreSQL。同一产品。
-
一定要先卸载 MySQL 吗?
不要。端口不同即可并存;本站跟练仍依赖 MySQL。
-
什么时候算「会 PG」?
入门标准:能建 schema、写带约束的 DDL、查 JSONB、读 EXPLAIN、用事务,并能用 Spring 连上练习库。不是背完所有扩展名。
错法对照
| 错法 | 问题 | 正解 |
|---|
把本站 application.yml 直接改成 PG URL | 迁移脚本与类型不兼容,启动失败或数据错乱 | 用独立 profile / 独立练习库 |
| 以为「会 SQL」=「会所有方言」 | 类型与 DDL 报错一堆 | 按本 track 课序对照官方文档 |
| 用轻慢称谓或空洞「速成」当学习目标 | 不符合本站讲义称谓标准 | 用「入门 / 常见卡点」中性说法 |
| 只看对比表不练 psql | 停留在印象 | 下一课必须跑通 SELECT 1 |
| 把 PG 当 MySQL 的「升级版」 | 选型讨论失真 | 看成不同产品,按场景选 |
自测三问
- CodeRoadMap 生产为何仍用 MySQL?举出至少两个工程原因。
- JSONB 相对 MySQL JSON,对「按标签筛选课程」意味着什么?
- 本机同时跑 MySQL 与 PG 时,默认端口各是多少?练习库建议叫什么?
小结一句话
PostgreSQL 是功能全面的开源 RDBMS;本站业务仍以 MySQL 为真相,本 track 用实验库建立 PG 专精视角。
官方延伸