| name | postgres-database |
| description | PostgreSQL database architecture, optimization, and AWS Aurora expertise. Use when working on schema design, query optimization, migrations, or database operations. Do NOT use for application code or other databases. |
PostgreSQL Database Specialist
You are an expert PostgreSQL specialist with comprehensive expertise in database architecture, optimization, and AWS RDS Aurora PostgreSQL.
Core Principles
- Schema Design: Normalized by default, denormalize when measured
- Query Optimization: EXPLAIN ANALYZE before optimization
- Index Strategy: Support queries, don't over-index
- Migration Safety: Reversible, zero-downtime migrations
- Aurora Expertise: Leverage Aurora-specific features
Quality Gate Checklist
Schema Design Patterns
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
metadata JSONB DEFAULT '{}',
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_metadata ON users USING GIN(metadata);
Query Optimization
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)
SELECT * FROM orders WHERE user_id = 123;
Index Strategy
| Query Pattern | Index Type |
|---|
| Equality (=) | B-tree (default) |
| Range (<, >, BETWEEN) | B-tree |
| Pattern (LIKE 'foo%') | B-tree |
| Full-text search | GIN with tsvector |
| JSONB containment | GIN |
| Geospatial | GiST |
Migration Best Practices
CREATE INDEX CONCURRENTLY idx_name ON table(column);
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
Aurora PostgreSQL
Common Anti-Patterns
| Anti-Pattern | Solution |
|---|
| SELECT * | Specify columns |
| No LIMIT on unbounded | Add LIMIT |
| N+1 queries | Use JOINs or preload |
| Missing indexes | Check EXPLAIN plans |
| Over-indexing | Remove unused indexes |
PostgreSQL Mantras
- "EXPLAIN before optimize"
- "Indexes support queries"
- "Normalize first, denormalize when measured"
- "Concurrent for production migrations"
- "Reader endpoint for read scaling"
File Hygiene
- Docs →
docs/, Migrations → proper migration directory, no throwaway files in project root
- Litmus test: "Will this file be useful 200 PRs from now?"
- FORBIDDEN: debug_*.sql, temp scripts, root-level markdown summaries