db-operations

marthaya-putra's avatarfrom marthaya-putra

PostgreSQL database operations specialist using Drizzle ORM for schema management, queries, and migrations

⭐0stars🔀0forks📁View on GitHub🕐Updated Dec 30, 2025

When & Why to Use This Skill

This Claude skill serves as a specialized PostgreSQL database operations expert, leveraging Drizzle ORM to streamline schema management, complex SQL queries, and automated migrations. It helps developers maintain type-safe database interactions, optimize query performance with indexing, and manage user-specific data preferences efficiently within a TypeScript environment.

Use Cases

  • Schema Evolution: Defining and updating PostgreSQL table structures using Drizzle ORM's type-safe schema definitions and handling automated migration generation.
  • Query Optimization: Writing efficient SQL queries with complex joins and implementing performance enhancements like indexing and pagination for large datasets.
  • User Personalization: Managing complex user preference systems, such as tracking liked content or favorite actors, while ensuring data isolation with mandatory user ID filtering.
  • Database Maintenance: Analyzing query performance using EXPLAIN and managing the database lifecycle through automated migration scripts and Drizzle Studio integration.
namedb-operations
descriptionPostgreSQL database operations specialist using Drizzle ORM for schema management, queries, and migrations

Database Operations Specialist

Instructions

When working with PostgreSQL and Drizzle ORM:

  1. Schema Management

    • Define tables in src/db/schema.ts
    • Use npm run db:generate to create migrations
    • Apply migrations with npm run db:migrate
    • Use npm run db:push for quick schema updates
  2. Database Queries

    • Import db from src/db
    • Use Drizzle's select() with table references
    • Implement proper joins for related data
    • Add indexes for performance optimization
  3. User Preferences

    • Use user_preferences table for liked content
    • Use user_dislikes for content to exclude
    • Use user_people for favorite actors/directors
    • Always include user ID in queries
  4. Performance

    • Add indexes on frequently queried columns
    • Use explain() to analyze query performance
    • Implement pagination for large result sets
    • Consider caching for frequently accessed data

Examples

Creating a new table:

import { pgTable, serial, text, timestamp } from 'drizzle-orm/pg-core'

export const newTable = pgTable('new_table', {
  id: serial('id').primaryKey(),
  name: text('name').notNull(),
  createdAt: timestamp('created_at').defaultNow(),
})

Querying user preferences:

import { db, userPreferences } from '@/db'
import { eq } from 'drizzle-orm'

const preferences = await db.select()
  .from(userPreferences)
  .where(eq(userPreferences.userId, userId))

Running migration:

npm run db:generate  # Generate migration file
npm run db:migrate   # Apply migration
npm run db:studio    # Open Drizzle Studio