📊 Capítulo 08: Migrações de Banco de Dados
Especialização Backend com Go & Gin Gonic
🗺️ AutoMigrate vs Ferramentas de Migração SQL Declarativas
flowchart TD
MIG{"Estratégia de Migração"}
MIG --> |"Desenvolvimento Rápido"| AUTO["db.AutoMigrate(&Usuario{}, &Pedido{})\n- Cria tabelas, novas colunas e índices automaticamente\n- NÃO deleta nem renomeia colunas existentes"]
MIG --> |"Produção Enterprise"| GOLANG_MIGRATE["golang-migrate / Goose\n- Scripts SQL versionados (000001_init.up.sql, 000001_init.down.sql)\n- Total controle sobre DDL e auditoria no Git"]
style MIG fill:#ede7f6,stroke:#512da8,stroke-width:2px
style AUTO fill:#fff3e0,stroke:#ff9800,stroke-width:1.5px
style GOLANG_MIGRATE fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
🎯 Slide 1: Cuidados com o AutoMigrate em Produção
-
Segurança: O
AutoMigratenunca deleta colunas para evitar perda acidental de dados, mas não altera tipos de dados complexos. - Em ambientes corporativos de alta criticidade, utilize migrações versionadas com
golang-migrate.
🎯 Slide 2: Executando Migrações SQL com golang-migrate
import (
"github.com/golang-migrate/migrate/v4"
_ "github.com/golang-migrate/migrate/v4/database/postgres"
_ "github.com/golang-migrate/migrate/v4/source/file"
)
m, err := migrate.New("file://db/migrations", "postgres://user:pass@localhost:5432/db?sslmode=disable")
if err == nil {
m.Up() // Aplica migrações pendentes
}
🎯 Slide 3: Boas Práticas de Deploy com Migrações
- Execute as migrações como um Init Container no Kubernetes antes de subir os novos pods da aplicação, garantindo compatibilidade retroativa com versões antigas (Zero-Downtime Migration).
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim