Source profileQuality 76/100

affaan-m/ECC/skills/postgres-patterns/SKILL.md

postgres-patterns

PostgreSQL database patterns for query optimization, schema design, indexing, and security. Based on Supabase best practices.

Source repository stars
234,327
Declared platforms
0
Static risk flags
0
Last source update
2026-07-27
Source checked
2026-07-28

Decision brief

What it does—and where it fits

Quick reference for PostgreSQL best practices. For detailed guidance, use the database-reviewer agent.

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/affaan-m/ECC --skill "skills/postgres-patterns"
    Safe inspection promptEditorial

    Inspect the Agent Skill "postgres-patterns" from https://github.com/affaan-m/ECC/blob/4e973d3eaf92d97f8d2e2d8abb39d8bdc8711b38/skills/postgres-patterns/SKILL.md at commit 4e973d3eaf92d97f8d2e2d8abb39d8bdc8711b38. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      When to Activate

      Writing SQL queries or migrations

      Writing SQL queries or migrationsDesigning database schemasTroubleshooting slow queries
    2. 02

      Quick Reference

      Review the “Quick Reference” section in the pinned source before continuing.

      Review and apply the “Quick Reference” source section.
    3. 03

      Index Cheat Sheet

      Review the “Index Cheat Sheet” section in the pinned source before continuing.

      Review and apply the “Index Cheat Sheet” source section.
    4. 04

      Data Type Quick Reference

      Review the “Data Type Quick Reference” section in the pinned source before continuing.

      Review and apply the “Data Type Quick Reference” source section.

    Permission review

    Static risk signals and limitations

    No configured static risk pattern was detected

    This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score76/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars234,327SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    affaan-m/ECC
    Skill path
    skills/postgres-patterns/SKILL.md
    Commit
    4e973d3eaf92d97f8d2e2d8abb39d8bdc8711b38
    License
    MIT
    Collected
    2026-07-28
    Default branch
    main
    View the original SKILL.md

    PostgreSQL Patterns

    Quick reference for PostgreSQL best practices. For detailed guidance, use the database-reviewer agent.

    When to Activate

    • Writing SQL queries or migrations
    • Designing database schemas
    • Troubleshooting slow queries
    • Implementing Row Level Security
    • Setting up connection pooling

    Quick Reference

    Index Cheat Sheet

    Query PatternIndex TypeExample
    WHERE col = valueB-tree (default)CREATE INDEX idx ON t (col)
    WHERE col > valueB-treeCREATE INDEX idx ON t (col)
    WHERE a = x AND b > yCompositeCREATE INDEX idx ON t (a, b)
    WHERE jsonb @> '{}'GINCREATE INDEX idx ON t USING gin (col)
    WHERE tsv @@ queryGINCREATE INDEX idx ON t USING gin (col)
    Time-series rangesBRINCREATE INDEX idx ON t USING brin (col)

    Data Type Quick Reference

    Use CaseCorrect TypeAvoid
    IDsbigintint, random UUID
    Stringstextvarchar(255)
    Timestampstimestamptztimestamp
    Moneynumeric(10,2)float
    Flagsbooleanvarchar, int

    Common Patterns

    Composite Index Order:

    -- Equality columns first, then range columns
    CREATE INDEX idx ON orders (status, created_at);
    -- Works for: WHERE status = 'pending' AND created_at > '2024-01-01'
    

    Covering Index:

    CREATE INDEX idx ON users (email) INCLUDE (name, created_at);
    -- Avoids table lookup for SELECT email, name, created_at
    

    Partial Index:

    CREATE INDEX idx ON users (email) WHERE deleted_at IS NULL;
    -- Smaller index, only includes active users
    

    RLS Policy (Optimized):

    CREATE POLICY policy ON orders
      USING ((SELECT auth.uid()) = user_id);  -- Wrap in SELECT!
    

    UPSERT:

    INSERT INTO settings (user_id, key, value)
    VALUES (123, 'theme', 'dark')
    ON CONFLICT (user_id, key)
    DO UPDATE SET value = EXCLUDED.value;
    

    Cursor Pagination:

    SELECT * FROM products WHERE id > $last_id ORDER BY id LIMIT 20;
    -- O(1) vs OFFSET which is O(n)
    

    Queue Processing:

    UPDATE jobs SET status = 'processing'
    WHERE id = (
      SELECT id FROM jobs WHERE status = 'pending'
      ORDER BY created_at LIMIT 1
      FOR UPDATE SKIP LOCKED
    ) RETURNING *;
    

    Anti-Pattern Detection

    -- Find unindexed foreign keys
    SELECT conrelid::regclass, a.attname
    FROM pg_constraint c
    JOIN pg_attribute a ON a.attrelid = c.conrelid AND a.attnum = ANY(c.conkey)
    WHERE c.contype = 'f'
      AND NOT EXISTS (
        SELECT 1 FROM pg_index i
        WHERE i.indrelid = c.conrelid AND a.attnum = ANY(i.indkey)
      );
    
    -- Find slow queries
    SELECT query, mean_exec_time, calls
    FROM pg_stat_statements
    WHERE mean_exec_time > 100
    ORDER BY mean_exec_time DESC;
    
    -- Check table bloat
    SELECT relname, n_dead_tup, last_vacuum
    FROM pg_stat_user_tables
    WHERE n_dead_tup > 1000
    ORDER BY n_dead_tup DESC;
    

    Configuration Template

    -- Connection limits (adjust for RAM)
    ALTER SYSTEM SET max_connections = 100;
    ALTER SYSTEM SET work_mem = '8MB';
    
    -- Timeouts
    ALTER SYSTEM SET idle_in_transaction_session_timeout = '30s';
    ALTER SYSTEM SET statement_timeout = '30s';
    
    -- Monitoring
    CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
    
    -- Security defaults
    REVOKE ALL ON SCHEMA public FROM public;
    
    SELECT pg_reload_conf();
    

    Related

    • Agent: database-reviewer - Full database review workflow
    • Skill: clickhouse-io - ClickHouse analytics patterns
    • Skill: backend-patterns - API and backend patterns

    Based on Supabase Agent Skills (credit: Supabase team) (MIT License)

    Alternatives

    Compare before choosing