SupabaseとPrismaでのIPv6 アドレスでの直接のデータベース接続方法

Nextman
Nextman

2024年1月26日よりSupabaseでIPv4 および pgBouncer を介した直接のデータベースへのアクセスが停止されたので、それに伴ってのPrismaでの接続方法を記しています。

Supabaseとは?

Supabaseは、PostgreSQLホスティングサービスであり、オープンソースのFirebaseの代替として提供されています。
これは、製品を構築するために必要なすべてのバックエンド機能を提供し、Prismaを使用して直接アクセスできるPostgreSQLに基づいています。

Supabaseのアーキテクチャ機能についての詳細はこちらをご覧ください。

他のデータベースプロバイダーとの共通点

Supabaseを使用する場合、Prismaを他のリレーショナルデータベースと同様に使用できます。以下は共通の操作です:

  • Prisma Schema Languageを使用してデータベースをモデル化

  • Prismaのpostgresqlデータベースコネクタを使用

  • 既存のプロジェクトにIntrospectionを使用

  • db pushを使用してスキーマの変更をプッシュ

  • Prisma Clientを使用してデータベースと対話

特定の考慮事項

以前は以下のように.envで設定していました。

DATABASE_URL="postgres://[user]:[password]@db.[your-supabase-project].supabase.co:5432/[db-name]"

Supabaseの接続プーリング機能を使用する場合は、?pgbouncer=trueDATABASE_URL環境変数に追加します:

DATABASE_URL="postgres://postgres.[your-supabase-project]:[password]@aws-0-eu-central-1.pooler.supabase.com:6543/postgres?pgbouncer=true"

Prisma CLIを使用して他のアクションを実行する場合は、DIRECT_URL環境変数を追加して、CLIがSupavisorをバイパスできるようにします:

# Supervisor を使用した接続プーリングを介して Supabase に接続します。
DATABASE_URL="postgres://postgres.[your-supabase-project]:[password]@aws-0-eu-central-1.pooler.supabase.com:6543/postgres?pgbouncer=true"

# データベースへの直接接続。 マイグレーションに使用されます。
DIRECT_URL="postgres://postgres:[password]@db.[your-supabase-project].supabase.co:5432/postgres"

その後、schema.prismaを新しい直接URLを使用するように更新できます:

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

directUrl フィールドに関する詳細はこちらで確認できます。

DIRECT_URL に加えて、Supavisor を使用した接続プーリングを強くお勧めします。これにより、Prisma CLI の優れた開発者エクスペリエンスを得ることができ、展開戦略に関係なく接続をプールできます。これはすべてのアプリケーションに厳密に必要ではありませんが、サーバーレスのソリューションでは接続プーリングが不可欠です。

SupabaseとPrismaの統合を始める

Supabaseに提供されたデータベースをPrismaプロジェクトに接続する手順に興味がある場合は、こちらのガイドを参照してください。

AIへの質問や指示のプロンプト共有コミュニティ Promptolkクリエイターのための情報共有コミュニティ Utan