mcpField
P
postgres-pro

postgres-pro

github.com/jeffallan数据与数据库12.1k8.0k 次安装今天更新
代码仓库

关于 postgres-pro

面向数据库开发者和管理员的 PostgreSQL 技能,涵盖查询与索引调优、JSONB、复制和维护,并以 EXPLAIN 与 pg_stat 监控为核心指导流程。

主要功能

  1. 01基于 EXPLAIN 的查询优化
  2. 02按工作负载设计索引
  3. 03JSONB 存储与索引模式
  4. 04流复制与逻辑复制
  5. 05VACUUM 与自动清理维护
  6. 06pg_stat 健康监控

适用场景

  1. 01调查慢查询
  2. 02部署前验证索引变更
  3. 03监控复制延迟
  4. 04诊断膨胀与自动清理活动

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jeffallan/claude-skills --skill postgres-pro

安装后在 Claude Code 中输入/postgres-pro确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
extensions.md
jsonb.md
maintenance.md
performance.md
replication.md

详细介绍

PostgreSQL Pro

资深 PostgreSQL 专家,在数据库管理、性能优化和 PostgreSQL 高级功能方面拥有深厚的专业知识。

何时使用此技能

  • 使用 EXPLAIN 分析和优化慢查询
  • 实施 JSONB 存储和索引策略
  • 设置流复制或逻辑复制
  • 配置和使用 PostgreSQL 扩展
  • 调优 VACUUM、ANALYZE 和 autovacuum
  • 使用 pg_stat 视图监控数据库健康状况
  • 设计索引以实现最佳性能

核心工作流

  1. 分析性能 — 运行 EXPLAIN (ANALYZE, BUFFERS),找出瓶颈
  2. 设计索引 — 根据工作负载选择 B-tree、GIN、GiST 或 BRIN;部署前使用 EXPLAIN 验证
  3. 优化查询 — 重写低效查询,运行 ANALYZE 刷新统计信息
  4. 设置复制 — 根据需求选择流复制或逻辑复制;持续监控复制延迟
  5. 监控和维护 — 通过 pg_stat 视图跟踪 VACUUM、膨胀和 autovacuum;每次更改后验证改进情况
端到端示例:慢查询 → 修复 → 验证
-- Step 1: Identify slow queries
SELECT query, mean_exec_time, calls
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 10;

-- Step 2: Analyze a specific slow query
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
SELECT * FROM orders WHERE customer_id = 42 AND status = 'pending';
-- Look for: Seq Scan (bad on large tables), high Buffers hit, nested loops on large sets

-- Step 3: Create a targeted index
CREATE INDEX CONCURRENTLY idx_orders_customer_status
  ON orders (customer_id, status)
  WHERE status = 'pending';  -- partial index reduces size

-- Step 4: Verify the index is used
EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM orders WHERE customer_id = 42 AND status = 'pending';
-- Confirm: Index Scan on idx_orders_customer_status, lower actual time

-- Step 5: Update statistics if needed after bulk changes
ANALYZE orders;

参考指南

根据上下文加载详细指南:

主题参考文档加载时机
性能references/performance.mdEXPLAIN ANALYZE、索引、统计信息、查询调优
JSONBreferences/jsonb.mdJSONB 运算符、索引、GIN 索引、包含查询
扩展references/extensions.mdPostGIS、pg_trgm、pgvector、uuid-ossp、pg_stat_statements
复制references/replication.md流复制、逻辑复制、故障转移
维护references/maintenance.mdVACUUM、ANALYZE、pg_stat 视图、监控、膨胀

常见模式

JSONB — GIN 索引和查询
-- Create GIN index for containment queries
CREATE INDEX idx_events_payload ON events USING GIN (payload);

-- Efficient JSONB containment query (uses GIN index)
SELECT * FROM events WHERE payload @> '{"type": "login", "success": true}';

-- Extract nested value
SELECT payload->>'user_id', payload->'meta'->>'ip'
FROM events
WHERE payload @> '{"type": "login"}';
VACUUM 和膨胀监控
-- Check tables with high dead tuple counts
SELECT relname, n_dead_tup, n_live_tup,
       round(n_dead_tup::numeric / NULLIF(n_live_tup + n_dead_tup, 0) * 100, 2) AS dead_pct,
       last_autovacuum
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC
LIMIT 20;

-- Manually vacuum a high-churn table and verify
VACUUM (ANALYZE, VERBOSE) orders;
复制延迟监控
-- On primary: check standby lag
SELECT client_addr, state, sent_lsn, write_lsn, flush_lsn, replay_lsn,
       (sent_lsn - replay_lsn) AS replication_lag_bytes
FROM pg_stat_replication;

约束

必须执行
  • 使用 EXPLAIN (ANALYZE, BUFFERS) 优化查询
  • 创建索引前后都使用 EXPLAIN 验证索引确实被使用
  • 在生产环境中使用 CREATE INDEX CONCURRENTLY,避免表锁
  • 大量数据变更后运行 ANALYZE,刷新统计信息
  • 监控 autovacuum;针对高变更率的表调优 autovacuum_vacuum_scale_factor
  • 使用连接池(pgBouncer、pgPool)
  • 通过 pg_stat_replication 监控复制延迟
  • 使用预处理语句防止 SQL 注入
  • UUID 使用 uuid 类型,而非 text
禁止执行
  • 全局禁用 autovacuum
  • 未先分析查询模式就创建索引
  • 在生产查询中使用 SELECT *
  • 忽略复制延迟警报
  • 跳过高变更率表的 VACUUM
  • 在数据库中存储大型 BLOB(使用对象存储)
  • 未验证规划器是否使用索引就部署索引变更

输出模板

实施 PostgreSQL 解决方案时,请提供:

  1. 查询的 EXPLAIN (ANALYZE, BUFFERS) 输出及解读
  2. 索引定义、设计理由,以及变更前后的验证结果
  3. 配置变更及变更前后的值
  4. 用于持续健康检查的监控查询
  5. 性能影响的简要说明

知识参考

PostgreSQL 12-16、EXPLAIN ANALYZE、B-tree/GIN/GiST/BRIN 索引、JSONB 运算符、流复制、逻辑复制、VACUUM/ANALYZE、pg_stat 视图、PostGIS、pgvector、pg_trgm、WAL 归档、PITR

由 @jeffallan 维护,他是 Synergetic Solutions 的首席顾问。

文档

评论

支持 Markdown