🦒
prisma migrationエラー advisory lockに詰まった話(Next.js)
Prisma のマイグレーションでハマったエラーの解決方法!
状況
最近、Supabase と Prisma を使って自分用のタスク管理アプリを作り始めたんですが、マイグレーションが上手くいかずつまずきました。
Prisma 初利用だったので、もっとちゃんと理解しないとですね...
どんなエラーが出たか?
マイグレーションを実行しようとしたら、こんなエラーが出てきました:
The database server at `aws-0-ap-northeast-1.pooler.supabase.com:5432` was reached but timed out.
Please try again.
Please make sure your database server is running at `aws-0-ap-northeast-1.pooler.supabase.com:5432`.
Context: Timed out trying to acquire a postgres advisory lock (SELECT pg_advisory_lock(72707369)). Elapsed: 10000ms.
原因は?
具体的には、Prisma がマイグレーション時に使う「Advisory Lock」が取得できないことが原因のよう。Prismaというかpostgresの機能ですかね。
おそらく、Prismaの勉強のために色々操作をしていたせいで、何かの操作が競合して何かのプロセスがLockを取得したままになってしまっていたのかもです。
解決方法
webで検索をして、「node_modules」の削除やCursorの再起動など試しましたが、効果がありませんでした。
最終的に効果があった解決方法は.env
ファイルに 以下の1 行を追加する方法です。
PRISMA_SCHEMA_DISABLE_ADVISORY_LOCK=true
時間がたてばLockが解除されて、解消されると言っている記事などもありましたが、とりあえず先に進みたかったので、これで対処。
ロック解除して大丈夫か?
とりあえず自分用だし、開発環境なので問題ないと判断して、この対処方法を採用しています。
仮に、本番環境としてリリースするということになった場合は、ちゃんと調査をして対処をします。
あくまで、勉強や開発環境でとりあえず先に進みたい方用の対処方法です。
まとめ
Supabase と Prisma の組み合わせ、めっちゃ便利なんですが、無知のまま使用すると環境構築の段階で色々問題が発生します。
このあたりのインフラ整備はまだまだAIで対処しきれない部分があるので、ちゃんと理解をしないですね...
Discussion