Closed3

Prisma (with Blitzjs) にてマイグレーションとデータベースの実態がが合わない場合の対応 (失敗)

rabitarochanrabitarochan

注意 (結論)

マイグレーション時にコンフリクトを検知し、リカバリーを試みたがだめだったので、結局データベースをリセットしています。

本編

Prisma (with Blitzjs) にて、マイグレーション作成後に手作業でデータ型を Date → String に変更したために、次にマイグレーションする際に次のエラーが発生した。

> blitz prisma migrate dev
Environment variables loaded from .env
Prisma schema loaded from db\schema.prisma
Datasource "db": PostgreSQL database "sample", schema "public" at "localhost:5432"

√ The migration `20210812045322_add_project` was modified after it was applied.

We need to reset the PostgreSQL database "sample" at "localhost:5432".
Do you want to continue? All data will be lost. (y/N)
rabitarochanrabitarochan

公式サイトに、マイグレーション時にコンフリクトを検出した場合、リセットされるという記載を発見。

(一部雑訳して抜粋)

開発環境では、Prisma Migrate がデータベースのリセットを要求することがあります。
リセットすると、データベースが削除、再作成されるため、データが失われます。
データベースは次の場合にリセットされます。

  1. prisma migrate reset を実行した時
  2. prisma migrate dev を実行し、Prisma Migrate がコンフリクトを検出した時
rabitarochanrabitarochan

マイグレーション情報は、対象データベースに _prisma_migrations というテーブルが作成されており、そこで管理されている。

データを見てみると、checksum というカラムがあり、マイグレーションスクリプト (.sql ファイル) を SHA-256 でハッシュ化した値が入っている。

変更したスクリプトのハッシュ値に入れ替え、再度 prisma migrate dev を実行したが、同じメッセージが表示された。

・・・仕方ないので諦める (笑)

このスクラップは2021/08/19にクローズされました