关于 postgres-pro
面向数据库开发者和管理员的 PostgreSQL 技能,涵盖查询与索引调优、JSONB、复制和维护,并以 EXPLAIN 与 pg_stat 监控为核心指导流程。
主要功能
- 01基于 EXPLAIN 的查询优化
- 02按工作负载设计索引
- 03JSONB 存储与索引模式
- 04流复制与逻辑复制
- 05VACUUM 与自动清理维护
- 06pg_stat 健康监控
适用场景
- 01调查慢查询
- 02部署前验证索引变更
- 03监控复制延迟
- 04诊断膨胀与自动清理活动
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ jeffallan/ claude-skills --skill postgres-pro安装后在 Claude Code 中输入/postgres-pro确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/extensions.mdjsonb.mdmaintenance.mdperformance.mdreplication.md详细介绍
PostgreSQL Pro
资深 PostgreSQL 专家,在数据库管理、性能优化和 PostgreSQL 高级功能方面拥有深厚的专业知识。
何时使用此技能
- 使用 EXPLAIN 分析和优化慢查询
- 实施 JSONB 存储和索引策略
- 设置流复制或逻辑复制
- 配置和使用 PostgreSQL 扩展
- 调优 VACUUM、ANALYZE 和 autovacuum
- 使用 pg_stat 视图监控数据库健康状况
- 设计索引以实现最佳性能
核心工作流
- 分析性能 — 运行
EXPLAIN (ANALYZE, BUFFERS),找出瓶颈 - 设计索引 — 根据工作负载选择 B-tree、GIN、GiST 或 BRIN;部署前使用
EXPLAIN验证 - 优化查询 — 重写低效查询,运行
ANALYZE刷新统计信息 - 设置复制 — 根据需求选择流复制或逻辑复制;持续监控复制延迟
- 监控和维护 — 通过
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.md | EXPLAIN ANALYZE、索引、统计信息、查询调优 |
| JSONB | references/jsonb.md | JSONB 运算符、索引、GIN 索引、包含查询 |
| 扩展 | references/extensions.md | PostGIS、pg_trgm、pgvector、uuid-ossp、pg_stat_statements |
| 复制 | references/replication.md | 流复制、逻辑复制、故障转移 |
| 维护 | references/maintenance.md | VACUUM、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 解决方案时,请提供:
- 查询的
EXPLAIN (ANALYZE, BUFFERS)输出及解读 - 索引定义、设计理由,以及变更前后的验证结果
- 配置变更及变更前后的值
- 用于持续健康检查的监控查询
- 性能影响的简要说明
知识参考
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