はじめに
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 の Storage の Quickstart に記載されているデータベースの接続 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 のセクションに記載されている接続方法に従い、.env
の DATABASE_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.prisma
に DIRECT_URL
を追加
Prisma の schema.prisma
に DIRECT_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 用のため、マイグレーションには適さないようです。