MR
Mayur Rathi
@mayurrathi
⭐ 5 GitHub stars

Database Migration

Execute database migrations across ORMs and platforms with zero-downtime strategies, data transformation, and rollback procedures. Use when migrating databases, changing schemas, performing data tr...

mkdir -p ./skills/database-migration && curl -sfL https://raw.githubusercontent.com/mayurrathi/awesome-agent-skills/main/skills/database-migration/SKILL.md -o ./skills/database-migration/SKILL.md

Run in terminal / PowerShell. Requires curl (Unix) or PowerShell 5+ (Windows).

Skill Content

# Database Migration


Master database schema and data migrations across ORMs (Sequelize, TypeORM, Prisma), including rollback strategies and zero-downtime deployments.


Do not use this skill when


- The task is unrelated to database migration

- You need a different domain or tool outside this scope


Instructions


- Clarify goals, constraints, and required inputs.

- Apply relevant best practices and validate outcomes.

- Provide actionable steps and verification.

- If detailed examples are required, open `resources/implementation-playbook.md`.


Use this skill when


- Migrating between different ORMs

- Performing schema transformations

- Moving data between databases

- Implementing rollback procedures

- Zero-downtime deployments

- Database version upgrades

- Data model refactoring


ORM Migrations


Sequelize Migrations

```javascript

// migrations/20231201-create-users.js

module.exports = {

up: async (queryInterface, Sequelize) => {

await queryInterface.createTable('users', {

id: {

type: Sequelize.INTEGER,

primaryKey: true,

autoIncrement: true

},

email: {

type: Sequelize.STRING,

unique: true,

allowNull: false

},

createdAt: Sequelize.DATE,

updatedAt: Sequelize.DATE

});

},


down: async (queryInterface, Sequelize) => {

await queryInterface.dropTable('users');

}

};


// Run: npx sequelize-cli db:migrate

// Rollback: npx sequelize-cli db:migrate:undo

```


TypeORM Migrations

```typescript

// migrations/1701234567-CreateUsers.ts

import { MigrationInterface, QueryRunner, Table } from 'typeorm';


export class CreateUsers1701234567 implements MigrationInterface {

public async up(queryRunner: QueryRunner): Promise<void> {

await queryRunner.createTable(

new Table({

name: 'users',

columns: [

{

name: 'id',

type: 'int',

isPrimary: true,

isGenerated: true,

generationStrategy: 'increment'

},

{

name: 'email',

type: 'varchar',

isUnique: true

},

{

name: 'created_at',

type: 'timestamp',

default: 'CURRENT_TIMESTAMP'

}

]

})

);

}


public async down(queryRunner: QueryRunner): Promise<void> {

await queryRunner.dropTable('users');

}

}


// Run: npm run typeorm migration:run

// Rollback: npm run typeorm migration:revert

```


Prisma Migrations

```prisma

// schema.prisma

model User {

id Int @id @default(autoincrement())

email String @unique

createdAt DateTime @default(now())

}


// Generate migration: npx prisma migrate dev --name create_users

// Apply: npx prisma migrate deploy

```


Schema Transformations


Adding Columns with Defaults

```javascript

// Safe migration: add column with default

module.exports = {

up: async (queryInterface, Sequelize) => {

await queryInterface.addColumn('users', 'status', {

type: Sequelize.STRING,

defaultValue: 'active',

allowNull: false

});

},


down: async (queryInterface) => {

await queryInterface.removeColumn('users', 'status');

}

};

```


Renaming Columns (Zero Downtime)

```javascript

// Step 1: Add new column

module.exports = {

up: async (queryInterface, Sequelize) => {

await queryInterface.addColumn('users', 'full_name', {

type: Sequelize.STRING

});


// Copy data from old column

await queryInterface.sequelize.query(

'UPDATE users SET full_name = name'

);

},


down: async (queryInterface) => {

await queryInterface.removeColumn('users', 'full_name');

}

};


// Step 2: Update application to use new column


// Step 3: Remove old column

module.exports = {

up: async (queryInterface) => {

await queryInterface.removeColumn('users', 'name');

},


down: async (queryInterface, Sequelize) => {

await queryInterface.addColumn('users', 'name', {


🎯 Best For

  • Claude users
  • Software engineers
  • Development teams
  • Tech leads

💡 Use Cases

  • Code quality improvement
  • Best practice enforcement

📖 How to Use This Skill

  1. 1

    Install the Skill

    Copy the install command from the Terminal tab and run it. The SKILL.md file downloads to your local skills directory.

  2. 2

    Load into Your AI Assistant

    Open Claude and reference the skill. Paste the SKILL.md content or use the system prompt tab.

  3. 3

    Apply Database Migration to Your Work

    Open your project in the AI assistant and ask it to apply the skill. Start with a small module to verify the output quality.

  4. 4

    Review and Refine

    Review AI suggestions before committing. Run tests, check for regressions, and iterate on the skill output.

❓ Frequently Asked Questions

Is Database Migration compatible with Cursor and VS Code?

Yes — this skill works with any AI coding assistant including Cursor, VS Code with Copilot, and JetBrains IDEs.

Do I need specific dependencies for Database Migration?

Check the install command and Works With section. Most code skills only require the AI assistant and your codebase.

How do I install Database Migration?

Copy the install command from the Terminal tab and run it. The skill downloads to ./skills/database-migration/SKILL.md, ready to use.

Can I customize this skill for my team?

Absolutely. Edit the SKILL.md file to add team-specific instructions, examples, or workflows.

⚠️ Common Mistakes to Avoid

Skipping validation

Always test AI-generated code changes, even for simple refactors.

Missing dependency updates

Check if the skill requires updated dependencies or new packages.

🔗 Related Skills