🐥

prismaのマイグレーションでP3009が出た際の対処法

2024/11/11に公開

前提環境

  • DB:vercelDB(postgres)
  • ORM:prisma

起こったエラー

Run yarn turbo db:migrate:deploy
yarn run v1.22.22
$ /home/runner/----/----/----/node_modules/.bin/turbo db:migrate:deploy

Attention:
Turborepo now collects completely anonymous telemetry regarding usage.
This information is used to shape the Turborepo roadmap and prioritize features.
You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:
https://turbo.build/repo/docs/telemetry

• Running db:migrate:deploy in 24 packages
• Remote caching disabled
Error: ----/prisma#db:migrate:deploy: command
-----:db:migrate:deploy
cache bypass, force executing 7ebee3cff93839c4
$ prisma migrate deploy
Environment variables loaded from .env
Prisma schema loaded from schema.prisma

110 migrations found in prisma/migrations

Error: P3009

migrate found failed migrations in the target database, new migrations will not be applied. Read more about how to resolve migration issues in a production database: https://pris.ly/d/migrate-resolve
The `20241104131648_add_schedule_interview_url` migration started at 2024-11-11 08:21:56.607675 UTC failed


error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
Error:  command finished with error: command (/home/runner/work/oobo/oobo/packages/prisma) /tmp/yarn--1731319071612-0.9708688810613961/yarn run db:migrate:deploy exited (1)

 Tasks:    0 successful, 1 total
Cached:    0 cached, 1 total
  Time:    7.46s 
Failed:    @oobo/prisma#db:migrate:deploy

 ERROR  run failed: command  exited (1)
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
Error: Process completed with exit code 1.

何が起こっていたのか

  • 前回失敗したマイグレーション(20241104131648_add_schedule_interview_url)が解決できていないため次のマイグレーションを実行することができない状態になっていた

解決

  • 今回の失敗したマイグレーションは不要だったため削除した
  • 20241104131648_add_schedule_interview_urlがログで出ていたのでマイグレーションを管理している_prisma_migrationsからnameで探し、そのidを削除しました
  • resolveを使用して解決済みにする方法もあるみたいですが、不要なら削除で新しいマイグレーションを動かした方が早い

番外編

prismaを使用してマイグレーションを作成、反映の手順

prismaのあるディレクトリに移動

prisma/schema.prisma

このファイルに追加または変更または削除する変更を加える

npx prisma generate

Prisma Clientを生成するコマンド
マイグレーションファイルもこの時に生成される

npx prisma migrate dev

これでローカル環境でマイグレーションを走らせてschema.prismaでした変更をDBに適用させる

Discussion