🦒

prisma migrationエラー advisory lockに詰まった話(Next.js)

2024/11/04に公開

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