O Guia para Resolver Conflitos de Migração do Prisma
Não execute prisma migrate reset em um banco de dados de produção.
Se você vir uma mensagem dizendo que uma migração foi modificada ou que você precisa resetar o schema, pare. O reset excluirá todos os seus dados. Você pode corrigir esses conflitos manualmente sem perder nada.
Erros Comuns do Prisma e Como Corrigi-los
Erro: A migração falhou durante a execução (P3018) • Corrija o arquivo SQL. • Execute: npx prisma migrate resolve --rolled-back [migration_name] • Execute: npx prisma db execute --file [path_to_sql_file] • Execute: npx prisma migrate resolve --applied [migration_name]
Erro: Migração modificada após ter sido aplicada (Incompatibilidade de checksum)
• Calcule o hash SHA-256 do seu arquivo de migração atual.
• Atualize o checksum na tabela _prisma_migrations.
• Importante: Atualize todas as linhas para esse nome de migração. Não filtre por rolled_back_at.
Erro: Coluna ausente no shadow database (P3006) • Isso acontece quando uma migração referencia uma coluna que uma migração posterior cria. • O Prisma reproduz as migrações em ordem de timestamp. • Correção: Mova o código SQL para a migração onde a coluna é criada pela primeira vez.
Erro: DROP COLUMN bloqueado por política de RLS • O Row Level Security do PostgreSQL vincula políticas a colunas. • Correção: Use CASCADE ao excluir colunas. • Exemplo: ALTER TABLE "my_table" DROP COLUMN IF EXISTS "tenant_id" CASCADE;
Melhores Práticas para Migrações Seguras
- Consulte o banco de dados primeiro. Não presuma se uma coluna ou índice existe. Use consultas SQL diretas para verificar o schema real do seu banco de dados antes de escrever o código de migração.
- Use IF EXISTS e IF NOT EXISTS. Isso torna suas migrações idempotentes. Uma migração idempotente pode ser executada várias vezes sem causar erros.
- Use blocos DO para constraints. Envolva adições de Foreign Key em uma verificação para ver se o nome da constraint já existe.
- Sempre use CASCADE para exclusões se você utilizar Row Level Security.
Tabela de Resumo
• P3018 (Falhou durante a execução): Corrija o SQL, depois use resolve --rolled-back e resolve --applied.
• Incompatibilidade de checksum: Calcule o novo hash e atualize todas as linhas em _prisma_migrations.
• Erro de Shadow DB: Verifique a ordem do timestamp e mova a lógica SQL.
• Erro de RLS: Adicione CASCADE aos seus comandos DROP.
