db-operations
PostgreSQL database operations specialist using Drizzle ORM for schema management, queries, and migrations
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.
| name | db-operations |
|---|---|
| description | PostgreSQL database operations specialist using Drizzle ORM for schema management, queries, and migrations |
Database Operations Specialist
Instructions
When working with PostgreSQL and Drizzle ORM:
Schema Management
- Define tables in
src/db/schema.ts - Use
npm run db:generateto create migrations - Apply migrations with
npm run db:migrate - Use
npm run db:pushfor quick schema updates
- Define tables in
Database Queries
- Import
dbfromsrc/db - Use Drizzle's select() with table references
- Implement proper joins for related data
- Add indexes for performance optimization
- Import
User Preferences
- Use
user_preferencestable for liked content - Use
user_dislikesfor content to exclude - Use
user_peoplefor favorite actors/directors - Always include user ID in queries
- Use
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