🎯

drizzle-migrations

🎯Skill

from dvorkinguy/claude-skills-agents

VibeIndex|
What it does

Manages PostgreSQL database migrations and schema evolution using Drizzle ORM, with seamless type inference and relation mapping for Neon serverless databases.

πŸ“¦

Part of

dvorkinguy/claude-skills-agents(13 items)

drizzle-migrations

Installation

npm installInstall npm package
npm install -g @anthropic-ai/claude-code
πŸ“– Extracted from docs: dvorkinguy/claude-skills-agents
1Installs
-
AddedFeb 4, 2026

Skill Details

SKILL.md

Drizzle ORM migrations for Neon PostgreSQL. Use when creating database schemas, running migrations, or troubleshooting Drizzle issues.

Overview

# Drizzle ORM Migrations

Setup

drizzle.config.ts

```typescript

import { defineConfig } from 'drizzle-kit';

export default defineConfig({

schema: './src/db/schema.ts',

out: './drizzle',

dialect: 'postgresql',

dbCredentials: {

url: process.env.DATABASE_URL!,

},

});

```

Connection (Neon Serverless)

```typescript

// src/db/index.ts

import { drizzle } from 'drizzle-orm/neon-http';

import { neon } from '@neondatabase/serverless';

import * as schema from './schema';

const sql = neon(process.env.DATABASE_URL!);

export const db = drizzle(sql, { schema });

```

Schema Patterns

Standard Table with Timestamps

```typescript

import { pgTable, text, timestamp, uuid, boolean } from 'drizzle-orm/pg-core';

const timestamps = {

createdAt: timestamp('created_at').defaultNow().notNull(),

updatedAt: timestamp('updated_at').defaultNow().notNull(),

};

export const projects = pgTable('projects', {

id: uuid('id').primaryKey().defaultRandom(),

name: text('name').notNull(),

userId: uuid('user_id').notNull().references(() => users.id),

isActive: boolean('is_active').default(true).notNull(),

...timestamps,

});

```

Type Inference

```typescript

export type Project = typeof projects.$inferSelect;

export type NewProject = typeof projects.$inferInsert;

```

Relations

```typescript

import { relations } from 'drizzle-orm';

export const usersRelations = relations(users, ({ many }) => ({

projects: many(projects),

}));

export const projectsRelations = relations(projects, ({ one }) => ({

owner: one(users, {

fields: [projects.userId],

references: [users.id],

}),

}));

```

Migration Commands

```bash

# Generate migration from schema changes

pnpm drizzle-kit generate

# Push schema directly (dev only, no migration file)

pnpm drizzle-kit push

# Apply migrations (production)

pnpm drizzle-kit migrate

# Open Drizzle Studio GUI

pnpm drizzle-kit studio

```

Workflow

  1. Modify schema.ts
  2. Generate migration: pnpm drizzle-kit generate
  3. Review SQL: Check drizzle/ folder
  4. Apply:

- Dev: pnpm drizzle-kit push

- Prod: pnpm drizzle-kit migrate

  1. Update types: Types auto-update from schema

Common Issues

"relation does not exist"

  • Migration not applied
  • Run: pnpm drizzle-kit push (dev) or migrate (prod)

"column X does not exist"

  • Schema out of sync
  • Generate new migration and apply

Type errors after schema change

  • Restart TypeScript server
  • Run: pnpm typecheck