Prismaの使い方
これまでの流れと質問のポイント
-
PrismaとSupabaseの統合方法:
- PrismaをSupabaseに接続して既存のデータベースを扱いたい。
- Supabaseのデータを削除せずに、Prismaで操作可能にする方法。
-
既存のテーブルをリセットせずに使いたい:
- Prismaのマイグレーション機能を使う際、データやテーブルをリセットせずに既存テーブルを利用する方法を知りたい。
-
prisma db pull
を使ったスキーマ生成:- 既存データベースの構造をPrismaスキーマとして取得し、そのままPrismaで活用したい。
-
やらなくてよいことが知りたい:
- 特に既存テーブルがある場合、不要な操作(データやテーブルのリセットなど)を避ける方法。
既存のテーブルがある場合の基本方針
Prismaを既存のデータベースと統合する場合、以下を行います:
やるべきこと
-
Prismaの初期設定
npx prisma init
- これにより、
prisma/schema.prisma
と.env
ファイルが生成されます。
- これにより、
-
Supabaseの接続情報を設定
-
.env
ファイルにSupabaseの接続情報を追加します:DATABASE_URL="postgresql://postgres:<password>@db.<project-ref>.supabase.co:5432/postgres"
-
-
既存のスキーマをPrismaに取り込む
npx prisma db pull
- 既存のデータベース構造が
prisma/schema.prisma
に反映されます。 - このステップで既存のデータベースをリセットする必要はありません。
- 既存のデータベース構造が
-
Prisma Clientの生成
npx prisma generate
- Prisma Clientを生成し、コードからデータベースを操作できるようにします。
-
Prismaでデータ操作
- Prisma Clientを使用して、既存テーブルを操作します。
const prisma = new PrismaClient(); async function fetchQuizResults() { const results = await prisma.quizResults.findMany(); console.log(results); } fetchQuizResults();
- Prisma Clientを使用して、既存テーブルを操作します。
やらなくてよいこと
-
既存テーブルの削除やリセット
-
prisma migrate dev
を実行しないでください。このコマンドはデータベース構造を変更し、競合がある場合にテーブルをリセットする可能性があります。
-
-
データの再作成
- 既存のデータはそのままで操作可能です。データベースをリセットして再構築する必要はありません。
-
不要なカラムやテーブルの削除
- Prismaスキーマを調整する際、必要のないカラムやテーブルを削除する操作はデータベースに影響を与える可能性があります。
- 必要に応じて、
prisma db pull
を再実行して最新状態を取得します。
-
Supabase特有の拡張機能の無効化
- Supabaseが提供する
pgcrypto
などのPostgreSQL拡張機能を無効にする必要はありません。Prismaはそれらを無視するため、特別な変更は不要です。
- Supabaseが提供する
最終的な流れ(既存テーブルを活用する場合)
-
Prismaのセットアップ:
npx prisma init
- 必要ファイル (
schema.prisma
,.env
) を生成。
- 必要ファイル (
-
Supabaseの接続設定:
-
.env
にDATABASE_URL
を設定。
-
-
既存スキーマをインポート:
npx prisma db pull
-
Prisma Clientの生成:
npx prisma generate
-
既存データベースの操作:
- Prisma Clientを使い、データを安全に操作。
具体的にやらなくてよいことまとめ
-
prisma migrate dev
を使ってテーブルを上書きまたは削除しない:- 既存テーブルがリセットされる可能性がある。
-
データベースのリセット操作をしない:
-
DROP SCHEMA
などの操作は不要。
-
-
Supabaseの特定の拡張機能を無効化しない:
- PrismaスキーマとSupabaseデータベースはそのまま整合できます。