Closed3
Prisma (with Blitzjs) にてマイグレーションとデータベースの実態がが合わない場合の対応 (失敗)
注意 (結論)
マイグレーション時にコンフリクトを検知し、リカバリーを試みたがだめだったので、結局データベースをリセットしています。
本編
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)
公式サイトに、マイグレーション時にコンフリクトを検出した場合、リセットされるという記載を発見。
(一部雑訳して抜粋)
開発環境では、Prisma Migrate がデータベースのリセットを要求することがあります。
リセットすると、データベースが削除、再作成されるため、データが失われます。
データベースは次の場合にリセットされます。
prisma migrate reset
を実行した時prisma migrate dev
を実行し、Prisma Migrate がコンフリクトを検出した時
マイグレーション情報は、対象データベースに _prisma_migrations
というテーブルが作成されており、そこで管理されている。
データを見てみると、checksum
というカラムがあり、マイグレーションスクリプト (.sql ファイル) を SHA-256 でハッシュ化した値が入っている。
変更したスクリプトのハッシュ値に入れ替え、再度 prisma migrate dev
を実行したが、同じメッセージが表示された。
・・・仕方ないので諦める (笑)
このスクラップは2021/08/19にクローズされました