O que é uma migration?

Uma migration é um arquivo que descreve uma mudança na estrutura do banco de dados.
Ela funciona como um registro organizado de tudo o que precisa ser alterado no banco.

Com migrations, conseguimos:

  • Criar tabelas
  • Alterar tabelas (adicionar/remover colunas)
  • Criar índices
  • Inserir dados iniciais (seed)
  • Desfazer alterações (rollback) se algo der errado

📦 Por que usar migrations?

Sem migrations, cada desenvolvedor teria que rodar comandos SQL manualmente. Isso gera erros, inconsistências e muita confusão entre ambientes.

Com migrations:

  • O código sabe exatamente qual versão do banco está sendo usada.
  • O banco pode ser atualizado automaticamente.
  • Todas as mudanças ficam registradas historicamente.
  • Todos os ambientes (dev, teste, produção) ficam sincronizados.

🛠 Por que ainda não está funcionando?

Porque ainda não criamos as nossas tabelas. Vamos confirmar isso acessando o banco:

docker exec -it postgres psql -U user -d appdb

Verifique se existem tabelas:

\dt

Se você observar que não há nada, isso confirma o problema:
👉 precisamos rodar as migrations para criar as tabelas.


🚀 Aplicando as migrations

Agora vamos aplicar as migrations com o Alembic:

docker exec -it backend alembic upgrade head

Depois disso, se tudo correu bem, ao listar as tabelas novamente você deverá ver algo assim:

 Schema |      Name       | Type  | Owner
--------+-----------------+-------+-------
 public | alembic_version | table | user
 public | companies       | table | user
 public | users           | table | user