CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
PostgreSQL 实战/课时/安装与 psql
RawBlame
课时目录12 节

PostgreSQL 实战

  1. 01PostgreSQL 是什么
  2. 02安装与 psql
  3. 03DDL 与约束
  4. 04数据类型
  5. 05JSONB
  6. 06索引与 EXPLAIN
  7. 07事务与 MVCC
  8. 08Spring Boot 接入
  9. 09迁移与 Flyway
  10. 10选型:PG vs MySQL
  11. 11Docker 运行 PG
  12. 12综合练习

安装与 psql

本地/ Docker 安装、psql 连接、基本 meta 命令。

30 分钟

安装与 psql

这一课你将能做到

  1. 用官方 Docker 镜像在本机跑起 PostgreSQL,且不碰本站 MySQL 3306
  2. 用 psql 连接、切换库、列出表,并执行 SELECT version();
  3. 把常用 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 仅本地。

讲清楚要点

  1. 因为 官方镜像在首次启动时读取 POSTGRES_USER / POSTGRES_DB,所以 改环境变量后若数据目录已初始化,不会自动重建用户——练习库直接删容器重建最省事。
  2. psql 默认自动提交:单条 SQL 立即生效;要事务需显式 BEGIN(事务课再练)。
  3. 连接串 postgresql://用户:密码@主机:端口/库 是应用与 GUI 的通用写法,Spring 里变成 jdbc:postgresql://…。
  4. schema ≠ 数据库:PG 里一个数据库下可有多个 schema(public、practice、app);MySQL 常把「库」当命名空间。本 track 后面用 app schema 模拟业务。
  5. 权限模型是角色:登录角色需要对库、schema、表有相应权限;开发镜像默认超级用户式角色够用,生产要收紧。
  6. 端口冲突时改映射:本机 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 课挂卷

自测三问

  1. POSTGRES_DB=codeforge_pg 与之后 psql -d codeforge_pg 分别解决什么问题?
  2. \c 和 MySQL 的 USE 有何对应?\dt 对应什么?
  3. 为何本课强调「不要改生产 MySQL 配置来学 PG」?

小结一句话

Docker 官方镜像 + psql 是本地学 PostgreSQL 的最低成本路径;先连上、会探元数据,再谈 DDL。

官方延伸

  • PostgreSQL:psql 客户端
  • Docker Hub:postgres 镜像
加载本节练习…
← 上一课PostgreSQL 是什么下一课 →DDL 与约束