大家好,我是程序员柏风,AI 最全的 Vibecoding 学习地图 http://coderoadmap.cn 作者。
安装与 psql
这一课你将能做到
- 用官方 Docker 镜像在本机跑起 PostgreSQL,且不碰本站 MySQL 3306
- 用 psql 连接、切换库、列出表,并执行
SELECT version(); - 把常用 meta 命令(
\l\c\dt\d)和 MySQL 客户端习惯一一对应上
为什么要学
PG 的交互入口是 psql(或任意兼容的 GUI)。不会连库,后面的 DDL、JSONB、事务课全是纸上谈兵。官方推荐开发者熟悉 psql:它能跑 SQL,也能用反斜杠命令探元数据,排错时比纯 GUI 更快。
本课用 Docker 降低安装摩擦:无需卸载 MySQL 8,无需改本站 application.yml。数据先放容器内即可;持久化卷放到 pg-docker。
先建立图像
你的终端
│ docker run … postgres:16-alpine
▼
容器 pg-dev :5432
│ POSTGRES_USER / PASSWORD / DB
▼
数据库 codeforge_pg
│ docker exec -it … psql
▼
psql 提示符 codeforge_pg=#
│ SQL 或 \dt \d …
▼
结果打印在终端
| 概念 | 人话 | 本课取值 |
|---|---|---|
| 实例 | 正在跑的 PG 服务 | Docker 容器 pg-dev |
| 数据库 | 实例里的一个库 | codeforge_pg |
| 角色(用户) | 登录身份 | codeforge |
| schema | 库内的命名空间 | 默认 public,稍后建 practice |
| psql | 官方命令行客户端 | 容器内或本机安装 |
MySQL 的 USE db ≈ psql 的 \c db;SHOW TABLES ≈ \dt。
跟着做
步骤 1:确认 Docker 可用
docker version
应看到 Client / Server 信息。若只有 Client 无 Server,先启动 Docker Desktop(或等价引擎)。
步骤 2:启动官方镜像
docker run -d --name pg-dev \
-e POSTGRES_USER=codeforge \
-e POSTGRES_PASSWORD=devpass \
-e POSTGRES_DB=codeforge_pg \
-p 5432:5432 \
postgres:16-alpine
说明:
POSTGRES_*环境变量由官方镜像在首次初始化时创建用户与库(见镜像说明)-p 5432:5432把容器端口映到本机;若本机已有其它 PG,可改成-p 5433:5432- 未挂卷时,
docker rm -v会丢数据——练习阶段可接受
检查:
docker ps --filter name=pg-dev
状态应为 Up。
步骤 3:进入 psql
docker exec -it pg-dev psql -U codeforge -d codeforge_pg
提示符类似 codeforge_pg=#。执行:
-- 确认版本与当前会话身份
SELECT version();
SELECT current_database(), current_user;
SELECT 1 AS ok;
应看到 PostgreSQL 16.x 一行版本串,以及 codeforge_pg / codeforge。
本机若已装客户端,也可用连接串:
psql "postgresql://codeforge:devpass@127.0.0.1:5432/codeforge_pg"
步骤 4:练一手 meta 命令
在 psql 中依次输入(每行回车):
\l
\dt
\dn
\l:列出数据库\dt:当前 search_path 下的表(新库应为空)\dn:列出 schema
再创建练习 schema:
CREATE SCHEMA practice;
\dn
\q
\q 退出。再 docker exec … psql … 进一次,确认 schema 仍在。
步骤 5:对照 MySQL 习惯做一张小表
| 你想做的事 | MySQL 近似 | psql / PG |
|---|---|---|
| 列库 | SHOW DATABASES | \l |
| 切库 | USE db | \c dbname |
| 列表 | SHOW TABLES | \dt |
| 看表结构 | DESCRIBE t | \d t |
| 退出 | exit | \q |
把这张表抄进笔记;后面课默认你已会 \d。
步骤 6:确认与 MySQL 并存
另开终端(可选):
# MySQL 仍应在 3306(本站主线)
# PG 在 5432
不要用本课容器当生产;密码 devpass 仅本地。
讲清楚要点
- 因为 官方镜像在首次启动时读取
POSTGRES_USER/POSTGRES_DB,所以 改环境变量后若数据目录已初始化,不会自动重建用户——练习库直接删容器重建最省事。 - psql 默认自动提交:单条 SQL 立即生效;要事务需显式
BEGIN(事务课再练)。 - 连接串
postgresql://用户:密码@主机:端口/库是应用与 GUI 的通用写法,Spring 里变成jdbc:postgresql://…。 - schema ≠ 数据库:PG 里一个数据库下可有多个 schema(
public、practice、app);MySQL 常把「库」当命名空间。本 track 后面用appschema 模拟业务。 - 权限模型是角色:登录角色需要对库、schema、表有相应权限;开发镜像默认超级用户式角色够用,生产要收紧。
- 端口冲突时改映射:本机 5432 被占用就映射
5433:5432,连接串端口跟着改。
你可能会懵的地方
-
psql: error: connection refused?
容器未就绪或端口映错。docker logs pg-dev看是否ready to accept connections;等几秒再连。 -
密码对但认证失败?
查用户名、库名是否与POSTGRES_*一致;URL 里特殊字符需编码。 -
\dt空但我记得建过表?
表可能在别的 schema,或连错了库。用\dt *.*或\dn+\dt practice.*。 -
要不要本机安装 PostgreSQL 服务?
入门不必。Docker 足够;GUI(DBeaver 等)可连同一端口。 -
和
mysql命令哪个更「正宗」?
对 PG 而言 psql 是官方客户端;GUI 是可选壳。本 track 步骤以 psql 为准。
错法对照
| 错法 | 问题 | 正解 |
|---|---|---|
把 -p 3306:5432 映到 MySQL 端口 | 与本站库冲突或连错引擎 | 用 5432:5432 或空闲端口 |
在未 docker exec 的本机直接敲 psql(未安装) | command not found | 用容器内 psql 或先装客户端 |
| 密码写进截图发群 | 泄露(即便是 dev) | 本地笔记即可;生产用密钥管理 |
以为 \d 是 SQL | 语法错误 | 反斜杠命令只在 psql 里有效 |
| 删容器却指望数据还在(未挂卷) | 练习数据丢失 | 接受重建,或按 docker 课挂卷 |
自测三问
POSTGRES_DB=codeforge_pg与之后psql -d codeforge_pg分别解决什么问题?\c和 MySQL 的USE有何对应?\dt对应什么?- 为何本课强调「不要改生产 MySQL 配置来学 PG」?
小结一句话
Docker 官方镜像 + psql 是本地学 PostgreSQL 的最低成本路径;先连上、会探元数据,再谈 DDL。