Claude Code Plugins

Community-maintained marketplace

Feedback

Master advanced PostgreSQL queries - CTEs, window functions, recursive queries

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name postgresql-advanced-queries
description Master advanced PostgreSQL queries - CTEs, window functions, recursive queries
version 3.0.0
sasmp_version 1.3.0
bonded_agent 02-postgresql-queries
bond_type PRIMARY_BOND
category database
difficulty intermediate
estimated_time 3h

PostgreSQL Advanced Queries Skill

Atomic skill for complex query patterns

Overview

Production-ready patterns for CTEs, window functions, recursive queries, and advanced joins.

Prerequisites

  • PostgreSQL 16+
  • Intermediate SQL knowledge

Parameters

parameters:
  query_type:
    type: string
    required: true
    enum: [cte, window, recursive, lateral, aggregate]
  tables:
    type: array
    items: { type: string }

Quick Reference

CTE Pattern

WITH step1 AS (SELECT ...), step2 AS (SELECT ... FROM step1)
SELECT * FROM step2;

Window Functions

ROW_NUMBER() OVER (PARTITION BY cat ORDER BY date DESC)
SUM(amount) OVER (ORDER BY date)  -- Running total
LAG(value, 1) OVER (ORDER BY date)  -- Previous row

Recursive Query

WITH RECURSIVE tree AS (
    SELECT id, parent_id, 1 as level FROM items WHERE parent_id IS NULL
    UNION ALL
    SELECT i.id, i.parent_id, t.level + 1 FROM items i JOIN tree t ON i.parent_id = t.id
)
SELECT * FROM tree;

LATERAL Join

SELECT u.*, r.* FROM users u
CROSS JOIN LATERAL (SELECT * FROM orders WHERE user_id = u.id LIMIT 3) r;

Test Template

DO $$ DECLARE result NUMERIC; BEGIN
    CREATE TEMP TABLE test_sales (id INT, amount NUMERIC);
    INSERT INTO test_sales VALUES (1, 100), (2, 200);
    SELECT SUM(amount) OVER (ORDER BY id) INTO result FROM test_sales WHERE id = 2;
    ASSERT result = 300, 'Running total should be 300';
    DROP TABLE test_sales;
END $$;

Troubleshooting

Error Cause Solution
42803 GROUP BY error Add missing columns
54001 Too complex Break into CTEs
21000 Multiple rows Add LIMIT 1

Usage

Skill("postgresql-advanced-queries")