Files
trackgo-be/.agents/skills/nestjs-best-practices/rules/db-use-migrations.md
T
shancheas 0b0bdd9c4b Add new skills for backend patterns, coding standards, continuous learning, and NestJS best practices
- Introduced backend patterns skill with guidelines on API design, database optimization, and server-side best practices.
- Added coding standards skill outlining universal coding principles for TypeScript, NestJS, and Node.js development.
- Implemented continuous learning skill to automatically extract reusable patterns from Cursor sessions.
- Created NestJS best practices skill detailing architecture patterns, dependency injection, error handling, and security measures.
- Included various rules and templates for NestJS best practices to ensure production-ready applications.
2026-08-20 18:30:39 +07:00

1.6 KiB

title, impact, impactDescription, tags
title impact impactDescription tags
Use Database Migrations HIGH Enables safe, repeatable database schema changes database, migrations, drizzle, schema

Use Database Migrations

Never push schema changes with drizzle-kit push in production. Use versioned SQL migrations for all schema changes. Migrations provide version control for your database, enable safe rollbacks, and ensure consistency across all environments.

Incorrect (pushing schema or running ad-hoc SQL):

// drizzle-kit push against production
// Mutates the live database with no rollback file

@Injectable()
export class DatabaseService {
  async addColumn(): Promise<void> {
    await this.db.execute(sql`ALTER TABLE users ADD COLUMN age INT`);
  }
}

Correct (generate and apply Drizzle migrations):

// drizzle.config.ts
import { defineConfig } from 'drizzle-kit';

export default defineConfig({
  schema: './drizzle/schema.ts',
  out: './drizzle/migrations',
  dialect: 'postgresql',
  dbCredentials: {
    url: process.env.DATABASE_URL!,
  },
});
# Generate a migration from schema diffs
npx drizzle-kit generate

# Apply migrations
npx drizzle-kit migrate
// drizzle/schema.ts
export const users = pgTable('users', {
  id: uuid('id').primaryKey().defaultRandom(),
  email: varchar('email', { length: 255 }).notNull(),
  age: integer('age').default(0),
});

Always keep down/rollback SQL when a migration is destructive. Never edit an already-applied migration file; add a new one.

Reference: Drizzle Kit Migrations