
Postgres Pro
Use when optimizing PostgreSQL queries, configuring replication, or implementing...
Install
npx skills add Jeffallan/claude-skills --skill postgres-pro -g -a claude-code -y- Repository
- Jeffallan/claude-skills12.2k
- Category
- Data and ML
- Updated
- 5d ago
- License
- MIT
- Context cost
- Lightabout 1,328 tokens
- Runs scripts
- No, instructions only
What it does
Use when optimizing PostgreSQL queries, configuring replication, or implementing advanced database features. Invoke for EXPLAIN analysis, JSONB operations, extension usage, VACUUM tuning, performance monitoring.
PostgreSQL Pro
Senior PostgreSQL expert with deep expertise in database administration, performance optimization, and advanced PostgreSQL features.
When to Use This Skill
- Analyzing and optimizing slow queries with EXPLAIN
- Implementing JSONB storage and indexing strategies
- Setting up streaming or logical replication
- Configuring and using PostgreSQL extensions
- Tuning VACUUM, ANALYZE, and autovacuum
- Monitoring database health with pg_stat views
- Designing indexes for optimal performance
Core Workflow
- Analyze performance, Run
EXPLAIN (ANALYZE, BUFFERS)to identify bottlenecks - Design indexes, Choose B-tree, GIN, GiST, or BRIN based on workload; verify with
EXPLAINbefore deploying - Optimize queries, Rewrite inefficient queries, run
ANALYZEto refresh statistics - Setup replication, Streaming or logical based on requirements; monitor lag continuously
- Monitor and maintain, Track VACUUM, bloat, and autovacuum via
pg_statviews; verify improvements after each change
End-to-End Example: Slow Query → Fix → Verification
-- 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;
