De gids voor het oplossen van Prisma-migratieconflicten
Voer prisma migrate reset niet uit op een productie-database.
Als je een melding ziet dat een migratie is gewijzigd of dat je het schema moet resetten, stop dan. Resetten zal al je gegevens verwijderen. Je kunt deze conflicten handmatig oplossen zonder iets te verliezen.
Veelvoorkomende Prisma-fouten en hoe je ze oplost
Fout: Migratie mislukt tijdens het uitvoeren (P3018)
• Pas het SQL-bestand aan.
• Voer uit: npx prisma migrate resolve --rolled-back [migration_name]
• Voer uit: npx prisma db execute --file [path_to_sql_file]
• Voer uit: npx prisma migrate resolve --applied [migration_name]
Fout: Migratie gewijzigd nadat deze is toegepast (Checksum mismatch)
• Bereken de SHA-256-hash van je huidige migratiebestand.
• Werk de checksum bij in de _prisma_migrations-tabel.
• Belangrijk: Werk alle rijen voor die migratienaam bij. Filter niet op rolled_back_at.
Fout: Kolom in shadow database ontbreekt (P3006) • Dit gebeurt wanneer een migratie verwijst naar een kolom die door een latere migratie wordt aangemaakt. • Prisma voert migraties opnieuw uit in volgorde van tijdstempel. • Oplossing: Verplaats de SQL-code naar de migratie waarin de kolom voor het eerst wordt aangemaakt.
Fout: DROP COLUMN geblokkeerd door RLS-beleid
• PostgreSQL Row Level Security koppelt beleid aan kolommen.
• Oplossing: Gebruik CASCADE bij het verwijderen van kolommen.
• Voorbeeld: ALTER TABLE "my_table" DROP COLUMN IF EXISTS "tenant_id" CASCADE;
Best practices voor veilige migraties
- Query de database eerst. Raad niet of een kolom of index bestaat. Gebruik directe SQL-queries om je werkelijke databaseschema te controleren voordat je migratiecode schrijft.
- Gebruik
IF EXISTSenIF NOT EXISTS. Dit maakt je migraties idempotent. Een idempotente migratie kan meerdere keren worden uitgevoerd zonder fouten te veroorzaken. - Gebruik
DO-blokken voor constraints. Wikkel het toevoegen van Foreign Keys in een controle om te zien of de naam van de constraint al bestaat. - Gebruik altijd
CASCADEbij verwijderingen als je Row Level Security gebruikt.
Samenvattende tabel
• P3018 (Mislukt tijdens uitvoering): Pas SQL aan, gebruik vervolgens resolve --rolled-back en resolve --applied.
• Checksum mismatch: Bereken een nieuwe hash en update alle rijen in _prisma_migrations.
• Shadow DB-fout: Controleer de volgorde van de tijdstempels en verplaats de SQL-logica.
• RLS-fout: Voeg CASCADE toe aan je DROP-statements.
