Pular para o conteúdo
Skillpedia
APIs e servidores (backend)41 mil · #4863

database-migration

Ajuda seu agente a mover bancos de dados entre plataformas. Ele garante que a migração seja sem interrupções.

O que ela faz

Esta ferramenta ajuda a atualizar a estrutura e os dados do seu banco de dados de forma segura. Ela permite fazer mudanças, como adicionar ou remover colunas, e garante que o sistema continue funcionando durante a atualização.

Quando usar

  • ✓Quando você precisa mudar a forma como os dados estão organizados no banco.
  • ✓Ao migrar seu banco de dados para uma nova tecnologia.
  • ✓Para atualizar seu banco de dados sem interromper o uso do sistema.

Exemplo do que pedir para a IA

“Como posso adicionar uma nova coluna 'email' à minha tabela de 'usuários' e garantir que ela não fique vazia?”

Quer saber mais? Abra as seções abaixo.

Como usar

O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.

Link da skill

https://github.com/wshobson/agents/blob/main/plugins/framework-migration/skills/database-migration/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/wshobson/agents/blob/main/plugins/framework-migration/skills/database-migration/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Você escreve instruções detalhadas para cada mudança desejada. A ferramenta aplica essas instruções passo a passo e pode reverter tudo se algo der errado.

Instalação

Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.

No terminal (Claude Code, Codex, Cursor), na pasta do projeto:

npx skills add wshobson/agents --skill database-migration

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/wshobson/agents/main/plugins/framework-migration/skills/database-migration/SKILL.md -o SKILL.md
Conteúdo técnico (SKILL.md)

Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.

Migração de Banco de Dados

Domine a migração de esquemas e dados de bancos de dados entre ORMs (Sequelize, TypeORM, Prisma), incluindo estratégias de rollback e implantações sem interrupção (zero downtime).

Quando Usar Esta Habilidade

  • Migrando entre diferentes ORMs
  • Realizando transformações de esquema
  • Movendo dados entre bancos de dados
  • Implementando procedimentos de rollback
  • Implantações sem interrupção (zero downtime)
  • Atualizações de versão de banco de dados
  • Refatoração de modelos de dados

Migrações de ORM

Migrações do Sequelize

// 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

Migrações do TypeORM

// 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

Migrações do 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

Transformações de Esquema

Adicionando Colunas com Valores Padrão

// 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");
  },
};

Renomeando Colunas (Zero Downtime)

// 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", {
      type: Sequelize.STRING,
    });
  },
};

Alterando Tipos de Coluna

module.exports = {
  up: async (queryInterface, Sequelize) => {
    // For large tables, use multi-step approach

    // 1. Add new column
    await queryInterface.addColumn("users", "age_new", {
      type: Sequelize.INTEGER,
    });

    // 2. Copy and transform data
    await queryInterface.sequelize.query(`
      UPDATE users
      SET age_new = CAST(age AS INTEGER)
      WHERE age IS NOT NULL
    `);

    // 3. Drop old column
    await queryInterface.removeColumn("users", "age");

    // 4. Rename new column
    await queryInterface.renameColumn("users", "age_new", "age");
  },

  down: async (queryInterface, Sequelize) => {
    await queryInterface.changeColumn("users", "age", {
      type: Sequelize.STRING,
    });
  },
};

Transformações de Dados

…

Perguntas frequentes

O que é um ORM?

ORM significa 'Object-Relational Mapping'. É uma técnica que ajuda a conectar seu código de programação com o banco de dados, traduzindo objetos do código em tabelas do banco e vice-versa.

O que significa 'zero-downtime'?

'Zero-downtime' significa que o sistema continua funcionando e disponível para os usuários mesmo durante a atualização do banco de dados.

O que é um 'rollback'?

Rollback é o processo de desfazer as mudanças feitas no banco de dados, retornando-o ao estado anterior, caso algo dê errado durante a atualização.

Detalhes

Descrição original do autor

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

repo: wshobson/agents

Popularidade

Estrelas no GitHub
41 mil
Posição no ranking
#4863
Licença
MIT
Atualizada em
15/10/2026

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas