0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Vercel + Supabase + Prismaでマイグレーションに失敗

Posted at

はじめに

Vercel の Storage で Supabase のデータベースを作成し、Prisma を使ってマイグレーションを試みましたが、途中で止まってしまいました。
Quickstartにある、POSTGRES_PRISMA_URL や、POSTGRES_URLを使用してみましたがうまくいかず、最終的に Supabase の Connect 設定 に記載されたURLを使用することで解決できたので、その経緯をまとめます。

環境

  • OS: Windows
  • Node.js: 20.14.0
  • Prisma: 6.4.0
  • PostgreSQL: Supabase 上のデータベース
  • Next.js: 15.1.6

問題点

Vercel の StorageQuickstart に記載されているデータベースの接続 URL (DATABASE_URL) を .env に設定し、Prisma のマイグレーションを実行しましたが、
以下のように止まってしまいました。

npx prisma migrate dev --name init
Environment variables loaded from .env
Prisma schema loaded from prisma\schema.prisma
Datasource "db": PostgreSQL database "<YOUR_DB_NAME>", schema "public" at "<YOUR_SUPABASE_HOST>:<YOUR_PORT>"

この状態で進まず、マイグレーションが適用されませんでした。

解決策

Supabase の Connect にある ORM 向けの設定を利用

Supabase の Connect → ORMs のセクションに記載されている接続方法に従い、.envDATABASE_URLを以下のように変更しました。
(ホスト名・DB名・ユーザー名・パスワードは、Supabase の Connect に記載されている値 を使用してください。)

# Connection Pooling 用 (通常のアプリ接続)
DATABASE_URL="postgresql://<YOUR_DB_USER>:<YOUR_DB_PASSWORD>@<YOUR_SUPABASE_HOST>:6543/<YOUR_DB_NAME>?pgbouncer=true"

# マイグレーション用 (Direct Connection)
DIRECT_URL="postgresql://<YOUR_DB_USER>:<YOUR_DB_PASSWORD>@<YOUR_SUPABASE_HOST>:5432/<YOUR_DB_NAME>"

prisma/schema.prismaDIRECT_URL を追加

Prisma の schema.prismaDIRECT_URL を追加することで、マイグレーション時のみ direct connection を使うようにしました。

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
  directUrl = env("DIRECT_URL")
}

prisma migrate dev を再実行

npx prisma migrate dev --name init

すると、問題なくマイグレーションが適用されました。

まとめ

Vercel の Storage Quickstart に書かれている DATABASE_URL は Connection Pooling 用のため、マイグレーションには適さないようです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?