Atualização do Banco de Dados em UAT/Homologação
Visão Geral
Este documento descreve o procedimento para atualizar o banco de dados em ambiente de UAT (User Acceptance Testing) ou Homologação quando há divergência entre o histórico de migrations do Entity Framework e o estado real do banco de dados.
Problema
Quando tentamos aplicar migrations em um banco de dados que já possui algumas alterações aplicadas manualmente ou através de outras fontes, o Entity Framework tenta executar todas as migrations novamente, causando erros como:
Isso ocorre porque o banco de dados não possui o histórico completo das migrations na tabela __EFMigrationsHistory, mesmo que as alterações já tenham sido aplicadas.
Solução: Sincronizar o Histórico de Migrations
A solução consiste em marcar manualmente as migrations que já foram aplicadas no banco de dados, inserindo seus registros na tabela __EFMigrationsHistory.
Procedimento Passo a Passo
Pré-requisitos
- Acesso ao banco de dados via
psqloupgAdmin - Lista das migrations que já foram aplicadas no banco
- Credenciais de acesso ao banco de homologação
Passo 1: Conectar ao Banco de Dados
Usando Make (Recomendado)
Usando psql Diretamente
Exemplo para ambiente local:
Exemplo para ambiente de homologação:
# Use as credenciais do arquivo .env
source .env
PGPASSWORD=$SGE_DB_PASSWORD psql \
-h $SGE_DB_HOST \
-p $SGE_DB_PORT \
-U $SGE_DB_USER \
-d $SGE_DB_SCHEMA
Passo 2: Verificar o Estado Atual do Histórico
Dentro do psql, execute:
O que você verá: - Lista das migrations já registradas no histórico - Se estiver vazio ou incompleto, precisamos adicionar as migrations faltantes
Passo 3: Identificar as Migrations Faltantes
Compare a lista do banco com as migrations no código fonte:
# Em outro terminal, listar todas as migrations do projeto
make migration-list
# Ou manualmente
ls -la src/Nelmetais.SGE.Data/Migrations/
Exemplo de migrations conhecidas:
20250111135936_initialcreate20250111143052_documento-fiscal-comissao20250111164642_documento-fiscal-comissao-planocomissaovenda20250121125526_NM2-Documento-Fiscal-Terceiros120250121222434_NM2-Documento-Fiscal-Terceiros220250123204156_NM-vendedor-delegado
Passo 4: Inserir as Migrations Faltantes no Histórico
⚠️ IMPORTANTE: Só insira migrations que você tem CERTEZA que já foram aplicadas no banco!
Ainda dentro do psql, execute:
INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") VALUES
('20250111135936_initialcreate', '6.0.18'),
('20250111143052_documento-fiscal-comissao', '6.0.18'),
('20250111164642_documento-fiscal-comissao-planocomissaovenda', '6.0.18'),
('20250121125526_NM2-Documento-Fiscal-Terceiros1', '6.0.18'),
('20250121222434_NM2-Documento-Fiscal-Terceiros2', '6.0.18'),
('20250123204156_NM-vendedor-delegado', '6.0.18')
ON CONFLICT DO NOTHING;
O ON CONFLICT DO NOTHING evita erros se alguma migration já estiver registrada.
Passo 5: Verificar a Inserção
Resultado esperado: - Todas as 6 (ou mais) migrations devem estar listadas - Ordenadas cronologicamente pelo timestamp no início do nome
Passo 6: Sair do psql
Passo 7: Aplicar as Migrations Pendentes
Agora que o histórico está sincronizado, você pode aplicar as migrations pendentes normalmente:
Usando Make (Recomendado)
Usando dotnet-ef Diretamente
Verificação Pós-Atualização
1. Verificar Migrations Aplicadas
Ou diretamente no banco:
2. Testar a Aplicação
Acesse: http://localhost:8000
3. Verificar Logs
Verifique se não há erros relacionados ao banco de dados nos logs da aplicação.
Backup e Segurança
⚠️ SEMPRE faça backup antes de qualquer alteração!
Backup Rápido
Backup Compactado (economiza espaço)
Restaurar Backup (se algo der errado)
# Restaurar último backup
make db-restore
# Ou restaurar arquivo específico
make db-restore-file FILE=./backups/nelmetais-backup-20250127_143000.sql
Troubleshooting
Erro: "relation already exists"
Causa: A migration está tentando criar uma tabela que já existe.
Solução: Marque essa migration como aplicada no histórico (Passo 4).
Erro: "column does not exist"
Causa: Uma migration anterior não foi aplicada corretamente.
Solução: 1. Restaure um backup 2. Aplique as migrations na ordem correta 3. Ou adicione manualmente a coluna faltante
Erro: "password authentication failed"
Causa: Credenciais incorretas no .env.
Solução: Verifique e corrija as variáveis no arquivo .env:
SGE_DB_HOST=<host_do_servidor>
SGE_DB_PORT=<porta>
SGE_DB_SCHEMA=NelmetaisDBHomologacao
SGE_DB_USER=<usuario>
SGE_DB_PASSWORD='<senha>'
⚠️ Nota: As credenciais reais estão no arquivo .env (não versionado). Consulte a equipe de infraestrutura se não tiver acesso.
Checklist Completo
Use este checklist ao atualizar o banco UAT:
- [ ] 1. Fazer backup do banco de dados (
make db-backup) - [ ] 2. Conectar ao banco (
make db-connect) - [ ] 3. Verificar histórico atual (
SELECT * FROM "__EFMigrationsHistory") - [ ] 4. Identificar migrations faltantes (
make migration-list) - [ ] 5. Inserir migrations no histórico (SQL INSERT)
- [ ] 6. Verificar inserção (SELECT novamente)
- [ ] 7. Sair do psql (
\q) - [ ] 8. Aplicar migrations pendentes (
make migrate) - [ ] 9. Verificar se aplicou corretamente (
make migration-list) - [ ] 10. Testar a aplicação (
make run-dev) - [ ] 11. Verificar logs por erros
- [ ] 12. Validar funcionalidades críticas
Ambientes
Desenvolvimento Local
SGE_DB_HOST=localhost
SGE_DB_PORT=5432
SGE_DB_SCHEMA=NelmetaisDBHomologacao
SGE_DB_USER=postgres
SGE_DB_PASSWORD=admin
UAT/Homologação (Servidor)
# ⚠️ Valores sensíveis não devem ser commitados
# Use o arquivo .env local (não versionado)
SGE_DB_HOST=<host_homologacao>
SGE_DB_PORT=<porta>
SGE_DB_SCHEMA=NelmetaisDBHomologacao
SGE_DB_USER=<usuario>
SGE_DB_PASSWORD='<senha>'
Nota: As credenciais reais de homologação estão disponíveis:
- No arquivo .env do servidor de homologação
- Com a equipe de infraestrutura/DevOps
- No gerenciador de senhas da empresa
Produção
# ⚠️ NUNCA aplique migrations diretamente em produção!
# Use sempre scripts SQL gerados e revisados.
make migration-script
Referências
- CORRECAO-MIGRATIONS.md - Configuração de migrations local
- Makefile - Comandos disponíveis
- Entity Framework Core - Migrations
Histórico de Alterações
| Data | Autor | Descrição |
|---|---|---|
| 2025-01-27 | Claude | Documentação inicial completa |
Notas Importantes
- SEMPRE faça backup antes de modificar o banco de dados
- Teste em ambiente de teste primeiro (se disponível)
- Nunca aplique migrations diretamente em produção - use scripts SQL revisados
- Documente todas as alterações feitas manualmente no banco
- Comunique a equipe antes de atualizar UAT/Homologação