~/VibeHandbook
PDF grátis

Capítulo 14 · 04

Migrações: Mudando o Schema com Segurança

Seu schema vai mudar — você vai adicionar uma coluna, renomear uma tabela, adicionar um índice. Pense nisso como edições rastreadas de um documento compartilhado: toda mudança é registrada em ordem, para que a cópia de todo mundo possa ser atualizada da mesma forma. Uma migração é um script versionado e repetível que descreve uma dessas mudanças. Migrações importam porque o schema no seu laptop, no laptop do seu colega de equipe e em produção precisam permanecer idênticos.

As regras que mantêm migrações seguras:

  • Nunca edite o banco de dados manualmente em produção. Escreva uma migração.
  • Migrações avançam. Cada uma é um arquivo novo; você não reescreve as antigas que já rodaram.
  • Faça mudanças destrutivas com cuidado. Descartar uma coluna ou tabela apaga dados permanentemente. Tenha um backup primeiro.
  • Mudanças aditivas são as mais seguras. Adicionar uma coluna anulável raramente quebra alguma coisa; renomear ou remover uma pode quebrar código em execução.

Migrações formam uma cadeia ordenada: cada uma é um passo numerado que move cada cópia do banco de dados de um estado conhecido para o próximo, para que seu laptop, o de um colega de equipe e a produção acabem todos idênticos:

   BD vazio
      │
      ▼
  ┌────────────┐   ┌────────────┐   ┌────────────┐   ┌────────────┐
  │ 001_init   │ ▶ │ 002_add    │ ▶ │ 003_index  │ ▶ │ 004_bio    │
  │ users      │   │ posts      │   │ on author  │   │ column     │
  └────────────┘   └────────────┘   └────────────┘   └────────────┘
   aplicar em ordem ────────────────────────────────────────▶ atual
   nunca edite um passo que já rodou — adicione um NOVO

Ferramentas como Prisma, Drizzle ou migrações do Rails geram e rastreiam isso para você. Deixe que elas façam.

Uma migração tem duas metades: a mudança a aplicar (up) e como desfazê-la (down). Uma ferramenta confiável gera as duas, para que um ruim possa voltar atrás de forma limpa:

-- up: adiciona uma bio opcional, seguro para aplicar ao vivo
ALTER TABLE users ADD COLUMN bio TEXT;

-- down: reverte
ALTER TABLE users DROP COLUMN bio;

As migrações genuinamente perigosas são renomeações e mudanças de tipo, porque o código antigo e o novo schema discordam brevemente. O padrão profissional é dividi-las em passos aditivos: adicione a nova coluna, preencha os dados retroativamente, mude o código para lê-la, e só descarte a coluna antiga em um deploy posterior, uma vez que nada mais a referencie. Parece lento, mas é a diferença entre um lançamento tranquilo e um pico de erros de página 500 para cada usuário no meio do deploy.

Quer offline?

Baixe o livro inteiro em PDF ou EPUB — grátis.