Pular para o conteúdo
Skillpedia
Deploy e nuvem (DevOps)280 mil · #39

database-migrations

Ajuda seu agente a fazer mudanças seguras em bancos de dados. Ele garante que as alterações possam ser desfeitas e minimiza o tempo de inatividade.

O que ela faz

Este agente ajuda a fazer alterações seguras e reversíveis no banco de dados do seu site ou aplicativo. Ele garante que as mudanças possam ser desfeitas e minimiza o tempo em que o site fica indisponível durante as atualizações.

Quando usar

  • ✓Ao criar ou modificar tabelas no banco de dados.
  • ✓Ao adicionar ou remover colunas ou índices em tabelas grandes.
  • ✓Ao planejar atualizações que não podem parar o site.

Exemplo do que pedir para a IA

“Como posso adicionar uma nova coluna a uma tabela de usuários sem que o site saia do ar?”

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/affaan-m/ECC/blob/main/pi/core/skills/database-migrations/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/database-migrations/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
Como funciona

Ele usa padrões específicos para alterar o banco de dados em etapas. Primeiro, faz a mudança, depois, se necessário, ajusta os dados e, por fim, remove as partes antigas, permitindo que o site continue funcionando.

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 affaan-m/ECC --skill database-migrations

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/database-migrations/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.

Padrões de Migração de Banco de Dados

Alterações seguras e reversíveis de esquema de banco de dados para sistemas de produção.

Quando Ativar

  • Criando ou alterando tabelas de banco de dados
  • Adicionando/removendo colunas ou índices
  • Executando migrações de dados (preenchimento, transformação)
  • Planejando alterações de esquema com zero tempo de inatividade
  • Configurando ferramentas de migração para um novo projeto

Princípios Fundamentais

  1. Toda alteração é uma migração — nunca altere bancos de dados de produção manualmente
  2. Migrações são apenas para frente em produção — rollbacks usam novas migrações para frente
  3. Migrações de esquema e de dados são separadas — nunca misture DDL e DML em uma única migração
  4. Teste migrações contra dados em tamanho de produção — uma migração que funciona em 100 linhas pode travar em 10M
  5. Migrações são imutáveis após serem implantadas — nunca edite uma migração que já foi executada em produção

Checklist de Segurança de Migração

Antes de aplicar qualquer migração:

  • Migração tem tanto UP quanto DOWN (ou é explicitamente marcada como irreversível)
  • Sem travamentos completos de tabela em tabelas grandes (use operações concorrentes)
  • Novas colunas têm padrões ou são anuláveis (nunca adicione NOT NULL sem padrão)
  • Índices criados concorrentemente (não em linha com CREATE TABLE para tabelas existentes)
  • Preenchimento de dados é uma migração separada da alteração de esquema
  • Testado contra uma cópia dos dados de produção
  • Plano de rollback documentado

Padrões PostgreSQL

Adicionando uma Coluna com Segurança

-- GOOD: Nullable column, no lock
ALTER TABLE users ADD COLUMN avatar_url TEXT;

-- GOOD: Column with default (Postgres 11+ is instant, no rewrite)
ALTER TABLE users ADD COLUMN is_active BOOLEAN NOT NULL DEFAULT true;

-- BAD: NOT NULL without default on existing table (requires full rewrite)
ALTER TABLE users ADD COLUMN role TEXT NOT NULL;
-- This locks the table and rewrites every row

Adicionando um Índice Sem Tempo de Inatividade

-- BAD: Blocks writes on large tables
CREATE INDEX idx_users_email ON users (email);

-- GOOD: Non-blocking, allows concurrent writes
CREATE INDEX CONCURRENTLY idx_users_email ON users (email);

-- Note: CONCURRENTLY cannot run inside a transaction block
-- Most migration tools need special handling for this

Renomeando uma Coluna (Zero Tempo de Inatividade)

Nunca renomeie diretamente em produção. Use o padrão expandir-contração:

-- Step 1: Add new column (migration 001)
ALTER TABLE users ADD COLUMN display_name TEXT;

-- Step 2: Backfill data (migration 002, data migration)
UPDATE users SET display_name = username WHERE display_name IS NULL;

-- Step 3: Update application code to read/write both columns
-- Deploy application changes

-- Step 4: Stop writing to old column, drop it (migration 003)
ALTER TABLE users DROP COLUMN username;

Removendo uma Coluna com Segurança

-- Step 1: Remove all application references to the column
-- Step 2: Deploy application without the column reference
-- Step 3: Drop column in next migration
ALTER TABLE orders DROP COLUMN legacy_status;

-- For Django: use SeparateDatabaseAndState to remove from model
-- without generating DROP COLUMN (then drop in next migration)

Migrações de Dados em Larga Escala

-- BAD: Updates all rows in one transaction (locks table)
UPDATE users SET normalized_email = LOWER(email);

-- GOOD: Batch update with progress
DO $$
DECLARE
  batch_size INT := 10000;
  rows_updated INT;
BEGIN
  LOOP
    UPDATE users
    SET normalized_email = LOWER(email)
    WHERE id IN (
      SELECT id FROM users
      WHERE normalized_email IS NULL
      LIMIT batch_size
      FOR UPDATE SKIP LOCKED
    );
    GET DIAGNOSTICS rows_updated = ROW_COUNT;
    RAISE NOTICE 'Updated % rows', rows_updated;
    EXIT WHEN rows_updated = 0;
    COMMIT;
  END LOOP;
END $$;

Prisma (TypeScript/Node.js)

Fluxo de Trabalho

# Create migration from schema changes
npx prisma migrate dev --name add_user_avatar

# Apply pending migrations in production
npx prisma migrate deploy

# Reset database (dev only)
npx prisma migrate reset

# Generate client after schema changes
npx prisma generate

Exemplo de Esquema

model User {
  id        String   @id @default(cuid())
  email     String   @unique
  name      String?
  avatarUrl String?  @map("avatar_url")
  createdAt DateTime @default(now()) @map("created_at")
  updatedAt DateTime @updatedAt @map("updated_at")
  orders    Order[]

  @@map("users")
  @@index([email])
}

Migração SQL Personalizada

Para operações que o Prisma não consegue expressar (índices concorrentes, preenchimento de dados):


…
Perguntas frequentes

O que é uma 'migração'?

É um conjunto de instruções para alterar a estrutura do banco de dados de forma controlada e segura.

Por que não posso alterar o banco de dados diretamente?

Alterações diretas podem causar erros, perda de dados ou deixar o site fora do ar. As migrações garantem um processo seguro e com possibilidade de reversão.

O que significa 'reversível'?

Significa que se algo der errado ou se você precisar desfazer uma alteração, existe um plano seguro para voltar ao estado anterior sem prejudicar os dados.

Detalhes

Descrição original do autor

Safe, reversible database migration patterns: forward-only production changes, expand-contract zero-downtime renames, concurrent indexes, batched backfills, and per-tool workflows for PostgreSQL, Prisma, Drizzle, Kysely, Django, and golang-migrate. Use when writing a schema or data migration, adding a column or index to a large table, planning a rollback, or preparing a zero-downtime deploy.

repo: affaan-m/ECC

Popularidade

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

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas