Prisma: Migration failed to apply
Prismaのマイグレーションが失敗した場合のエラー原因と解決策
概要
Prismaのデータベースマイグレーションが適用できない場合のエラーです。
エラーメッセージ
``` Error: P3009 - migrate found failed migrations in the target database ```
原因
- マイグレーション履歴の不整合: 手動でDBを変更した
- 既存データとの競合: NOT NULL制約等が既存データに違反
- 権限不足: DBユーザーにDDL権限がない
- 前回のマイグレーション失敗: 中途半端な状態
解決策
1. 失敗したマイグレーションをリセット
```bash
開発環境: DBをリセット
npx prisma migrate reset
本番環境: 失敗したマイグレーションをマーク
npx prisma migrate resolve –rolled-back “20231201000000_failed_migration” ```
2. マイグレーション履歴を確認
```bash
状態を確認
npx prisma migrate status
差分を確認
npx prisma migrate diff –from-schema-datamodel prisma/schema.prisma –to-schema-datasource prisma/schema.prisma ```
3. 既存データに対応したマイグレーション
```sql – migration.sql – 既存データにデフォルト値を設定してからNOT NULLに ALTER TABLE “User” ADD COLUMN “role” TEXT DEFAULT ‘user’; UPDATE “User” SET “role” = ‘user’ WHERE “role” IS NULL; ALTER TABLE “User” ALTER COLUMN “role” SET NOT NULL; ```
4. ベースラインを設定
```bash
既存DBにベースラインを設定
npx prisma migrate resolve –applied “20231201000000_init” ```
5. スキーマを強制同期(開発環境のみ)
```bash npx prisma db push –accept-data-loss ```
よくある間違い
- 本番DBでmigrate resetを実行
- マイグレーションファイルを手動で削除
- 複数環境で異なるマイグレーション履歴
関連エラー
関連エラー
Database の他のエラー
この記事は役に立ちましたか?