Supabase
このガイドでは、Prisma ORMとSupabaseの使用に関する概念、Supabaseと他のデータベースプロバイダー間の共通点と相違点について説明し、Supabaseと統合するようにアプリケーションを構成するプロセスを説明します。
Supabaseとは?
Supabase は、PostgreSQLホスティングサービスであり、プロダクトの構築に必要なすべてのバックエンド機能を提供するオープンソースのFirebase代替です。Firebaseとは異なり、SupabaseはPrisma ORMを使用して直接アクセスできるPostgreSQLによってバックアップされています。
Supabaseの詳細については、アーキテクチャをこちら、機能をこちらで確認できます。
他のデータベースプロバイダーとの共通点
Prisma ORMをSupabaseで使用する多くの側面は、他のリレーショナルデータベースでPrisma ORMを使用するのと同様です。引き続き以下が可能です。
- Prisma Schema Languageを使用してデータベースをモデル化する
- スキーマでPrisma ORMの既存の
postgresql
データベースコネクタと、Supabaseが提供する接続文字列を使用する - Supabaseにすでにデータベーススキーマがある場合は、既存のプロジェクトにイントロスペクションを使用する
db push
を使用して、スキーマの変更をSupabaseにプッシュする- アプリケーションでPrisma Clientを使用して、Supabaseのデータベースサーバーと通信する
特定の考慮事項
Supabaseで利用可能な接続プーリング機能を使用する場合は、Supabaseデータベース設定から利用可能な接続プーリング接続文字列をDATABASE_URL
環境変数に追加し、末尾に?pgbouncer=true
を付加する必要があります。
# Connect to Supabase via connection pooling with Supavisor.
DATABASE_URL="postgres://postgres.[your-supabase-project]:[password]@aws-0-[aws-region].pooler.supabase.com:6543/postgres?pgbouncer=true"
データベースで他のアクション(例:マイグレーション)を実行するためにPrisma CLIを使用する場合は、CLIがSupavisorをバイパスできるように、datasource.directUrl
プロパティで使用するDIRECT_URL
環境変数を追加する必要があります。
# Connect to Supabase via connection pooling with Supavisor.
DATABASE_URL="postgres://postgres.[your-supabase-project]:[password]@aws-0-[aws-region].pooler.supabase.com:6543/postgres?pgbouncer=true"
# Direct connection to the database. Used for migrations.
DIRECT_URL="postgres://postgres.[your-supabase-project]:[password]@aws-0-[aws-region].pooler.supabase.com:5432/postgres"
その後、新しいダイレクトURLを使用するようにschema.prisma
を更新できます。
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
directUrl = env("DIRECT_URL")
}
directUrl
フィールドの詳細については、こちらをご覧ください。
DIRECT_URL
に加えて、Supavisorで接続プーリングを使用することを強くお勧めします。デプロイ戦略に関係なく、接続をプールできるだけでなく、Prisma CLIの優れた開発者エクスペリエンスも得られます。これはすべてのアプリに厳密に必要なわけではありませんが、サーバーレスソリューションでは必然的に接続プーリングが必要になります。
Supabaseを始める
詳細を知りたい場合は、Supabaseが提供するデータベースをPrismaプロジェクトに接続するための優れたガイドがこちらで入手できます。
Supabaseとの統合で問題が発生した場合は、これらの特定のトラブルシューティングのヒントまたはPrismaのGitHub Discussionsで詳細なヘルプをご覧ください。