Agent Skills: Drizzle + PostgreSQL in Next.js

Drizzle ORM against PostgreSQL inside a Next.js App Router app. Covers client construction (globalThis singleton across HMR, serverless pool sizing, `prepare:false` behind PgBouncer/Supavisor, driver choice when you need interactive transactions, `server-only`), reads in Server Components under Next.js 16 Cache Components (`use cache` superseding `unstable_cache` and the `revalidate`/`dynamic` segment configs, Suspense boundaries, React `cache()` dedupe), Server Actions (authorization inside the action, `updateTag` vs `revalidateTag`, `after()`), Postgres schema types (timestamptz, identity vs serial, jsonb, numeric-as-string, bigint modes), drizzle-kit migrations (generate vs push, CONCURRENTLY outside the migrator, NOT VALID constraints, rename prompts), transactions and pooled connections, and Postgres query traps (keyset pagination, count cost, driver-dependent `db.execute()` shape, NOT IN nulls, prepared statements). Use when writing or reviewing Drizzle + Postgres code in Next.js.

UncategorizedID: pproenca/dot-skills/drizzle-nextjs-postgres

Install this agent skill to your local

pnpm dlx add-skill https://github.com/pproenca/dot-skills/tree/HEAD/skills/.experimental/drizzle-nextjs-postgres

Skill Files

Browse the full folder contents for drizzle-nextjs-postgres.

Download Skill

Loading file tree…

skills/.experimental/drizzle-nextjs-postgres/SKILL.md

Skill Metadata

Name
drizzle-nextjs-postgres
Description
Drizzle ORM against PostgreSQL inside a Next.js App Router app. Covers client construction (globalThis singleton across HMR, serverless pool sizing, `prepare:false` behind PgBouncer/Supavisor, driver choice when you need interactive transactions, `server-only`), reads in Server Components under Next.js 16 Cache Components (`use cache` superseding `unstable_cache` and the `revalidate`/`dynamic` segment configs, Suspense boundaries, React `cache()` dedupe), Server Actions (authorization inside the action, `updateTag` vs `revalidateTag`, `after()`), Postgres schema types (timestamptz, identity vs serial, jsonb, numeric-as-string, bigint modes), drizzle-kit migrations (generate vs push, CONCURRENTLY outside the migrator, NOT VALID constraints, rename prompts), transactions and pooled connections, and Postgres query traps (keyset pagination, count cost, driver-dependent `db.execute()` shape, NOT IN nulls, prepared statements). Use when writing or reviewing Drizzle + Postgres code in Next.js.

Drizzle + PostgreSQL in Next.js

Library-reference skill for Drizzle ORM on PostgreSQL inside the Next.js App Router — 36 rules across 7 categories. Each rule names the wrong default it corrects; there is no rule for things a capable model already gets right.

This skill is self-contained: it includes the migration-workflow and type-inference rules a Postgres + Next.js developer needs even where the underlying wrong default is not Postgres-specific, so you never have to load a second skill mid-task. A few of those knowingly overlap the sibling drizzle-sqlite skill (same wrong default, restated for this context); the rest are decisions that only exist, or only bite differently, because the dialect is PostgreSQL or the code runs in the App Router.

Pinned to drizzle-orm 0.45.2, drizzle-kit 0.31.10, Next.js 16.2.11, PostgreSQL 14+.

When to Apply

  • Writing or reviewing the lib/db module — driver choice, pooling, singletons, server-only
  • Fetching data in a Server Component, Route Handler, or generateMetadata with db.select() / db.query.*
  • Deciding what to cache: use cache, cacheLife, cacheTag, React cache(), or nothing
  • Writing a Server Action that mutates rows and has to invalidate what the read path cached
  • Defining or changing a pgTable — column types, indexes, enums, constraints
  • Running drizzle-kit generate / migrate / push, or hand-editing a generated .sql file
  • Wrapping work in db.transaction(), or debugging a race, deadlock, or exhausted pool
  • Reviewing a list, count, or pagination query that is fine locally and slow in production

Rule Categories

| # | Category | Prefix | Covers | |---|----------|--------|--------| | 1 | Client Construction & Driver Choice | conn- | Singletons across HMR, serverless pool sizing, poolers, driver capability, server-only, passing schema | | 2 | Reads in Server Components | rsc- | Suspense boundaries, use cache / cacheLife / cacheTag, request dedupe, waterfalls, runtime choice | | 3 | Server Actions & Mutations | mut- | Authorization and validation in the action, cache invalidation, deferred writes | | 4 | Postgres Schema Definition | schema- | timestamptz, identity columns, text vs varchar, numeric, jsonb, bigint modes, table config, enums | | 5 | Migrations & Schema Change Safety | migrate- | generate vs push, concurrent indexes, where migrations run, renames, lock-safe constraints | | 6 | Transactions & Pooled Connections | tx- | Connection cost of a held transaction, row locking, serialization retries | | 7 | Postgres Query Building | query- | Keyset pagination, count cost, driver-dependent execute shape, NULL semantics, prepared statements |

Quick Reference

1. Client Construction & Driver Choice

2. Reads in Server Components

3. Server Actions & Mutations

4. Postgres Schema Definition

5. Migrations & Schema Change Safety

6. Transactions & Pooled Connections

7. Postgres Query Building

How to Use

Read a reference file when its decision comes up. Each rule names the wrong default it corrects, then shows the canonical way (with an incorrect/correct contrast only where the wrong way is a real trap).

Related Skills

  • drizzle-sqlite — the same ORM against SQLite-family backends; covers the dialect-agnostic query-building rules this skill deliberately omits
  • nextjs — App Router patterns beyond the data layer
  • relational-database-design — choosing the schema this skill teaches you to declare

Reference Files

| File | Description | |------|-------------| | references/_sections.md | Category definitions and ordering | | assets/templates/_template.md | Template for new rules | | metadata.json | Version and source references |