Migrations versionam schema de database. Track mudanças, rollback, sync entre ambientes. Essencial para CI/CD de databases.
Conceitos Principais
Version Control
Cada migration é arquivo. Timestamp ou sequence number. Git tracked. Ordem garantida.
Up/Down
Up: aplica mudança. Down: reverte. Rollback possível. Nem todas changes são reversíveis.
Migration State
Tabela de metadados. Rastreia applied migrations. Evita re-run. Detecta drift.
Zero-Downtime
Migrations não podem quebrar app rodando. Additive changes first. Remove em migration futura.
Passo a Passo
- Setup Knex: npm install knex. knex init. knexfile.js config: development, staging, production. knex migrate:make create_users.
- Create Migration: exports.up = (knex) => knex.schema.createTable("users", (table) => { table.increments("id"); table.string("email").unique(); }); exports.down = (knex) => knex.schema.dropTable("users");
- Run Migrations: knex migrate:latest. Apply all pending. CI/CD: auto-run before deploy. Staging primeiro.
- Rollback: knex migrate:rollback. Reverte last batch. Teste rollback em staging. Data loss possível.
- Zero-Downtime Pattern: Migration 1: ADD column (nullable). Deploy code. Migration 2: Populate column. Migration 3: Make NOT NULL. Migration 4: Remove old column.
Boas Praticas
Recomendacoes
• Migrations pequenas e focadas
• Teste em staging primeiro
• Rollback sempre testado
• Nunca edite migrations aplicadas
• Zero-downtime: additive first
• Backup antes de migration
• Migrations em CI/CD
Erros Comuns
Evite estes erros
• Editar migration aplicada
• Migration sem down
• Não testar rollback
• Breaking change sem estratégia
• Migrations manuais em produção
• Sem backup
Checklist
- Migration tool configurado
- Primeira migration criada
- Up/down testados
- Rollback funciona
- CI/CD integrado
- Zero-downtime strategy definida