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

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

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

学习

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

更多

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

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
PostgreSQL DBA 入门/课时/SQL 与事务
RawBlame
课时目录12 节

PostgreSQL DBA 入门

  1. 01DBA 职责与 PG 架构
  2. 02安装与部署
  3. 03安全与权限
  4. 04SQL 与事务
  5. 05对象模型与类型
  6. 06索引与执行计划
  7. 07性能与监控
  8. 08备份与恢复
  9. 09复制与高可用
  10. 10PL/pgSQL 与触发器
  11. 11自动化运维
  12. 12综合练习

SQL 与事务

查询、CTE、事务、反模式。

35 分钟

DBA 必备 SQL 与系统目录

DBA 除业务 SQL 外,需熟悉 系统视图、EXPLAIN 与 锁诊断。与 /roadmaps/postgresql-dba SQL 节点对齐。

学习目标

  • 查询 pg_catalog / information_schema 获取元数据
  • 使用 EXPLAIN (ANALYZE, BUFFERS) 读执行计划
  • 诊断阻塞与长事务

核心概念

元数据查询

SELECT table_schema, table_name, column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'app' AND table_name = 'cf_track';

SELECT indexname, indexdef
FROM pg_indexes
WHERE schemaname = 'app';

执行计划

EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
SELECT * FROM app.cf_track WHERE slug = 'postgresql-dba-essentials';

关注:Seq Scan vs Index Scan、Buffers: shared hit/read、实际行数 vs 估计行数。

锁与长事务

SELECT pid, usename, state, wait_event_type,
       left(query, 80) AS query, now() - xact_start AS age
FROM pg_stat_activity
WHERE state <> 'idle'
ORDER BY age DESC;

SELECT blocked.pid AS blocked_pid, blocking.pid AS blocking_pid
FROM pg_locks blocked
JOIN pg_locks blocking ON blocking.locktype = blocked.locktype
  AND blocking.database IS NOT DISTINCT FROM blocked.database
  AND blocking.relation IS NOT DISTINCT FROM blocked.relation
  AND blocking.page IS NOT DISTINCT FROM blocked.page
  AND blocking.tuple IS NOT DISTINCT FROM blocked.tuple
  AND blocking.virtualxid IS NOT DISTINCT FROM blocked.virtualxid
  AND blocking.transactionid IS NOT DISTINCT FROM blocked.transactionid
  AND blocking.classid IS NOT DISTINCT FROM blocked.classid
  AND blocking.objid IS NOT DISTINCT FROM blocked.objid
  AND blocking.objsubid IS NOT DISTINCT FROM blocked.objsubid
  AND blocked.granted = false AND blocking.granted = true;

必要时:SELECT pg_cancel_backend(pid); 或 pg_terminate_backend(pid);(慎用)。

与 MySQL/Spring Boot 对照

项PostgreSQLMySQL 8
执行计划EXPLAIN ANALYZEEXPLAIN ANALYZE
进程列表pg_stat_activity
SHOW PROCESSLIST / performance_schema
锁pg_locksperformance_schema.data_locks
ORM 慢 SQLMyBatis 日志 + PG 计划同,换数据源

Spring Boot 可开 logging.level.org.postgresql=DEBUG 调试 JDBC;生产用 pg_stat_statements 聚合更稳妥。

练习

  • 对 slug 查询跑 EXPLAIN ANALYZE,记录 scan 类型
  • 模拟长事务(BEGIN; SELECT pg_sleep(60);),在另一会话查 blocking
  • 导出 app schema 下所有索引定义到文本文件

小结

系统目录 + EXPLAIN + 活动会话是 DBA 排障三件套。 下一课数据类型与存储取舍。

加载本节练习…
← 上一课安全与权限下一课 →对象模型与类型