既存のデータベースからインポート
このガイドでは、既存のPostgreSQLデータベースからPrisma Postgresにデータをインポートするためのステップバイステップの手順を説明します。
この移行は3つのステップで完了できます。
- 新しいPrisma Postgresデータベースを作成します。
pg_dump
を使用して既存のデータをエクスポートします。pg_restore
を使用して、以前にエクスポートしたデータをPrisma Postgresにインポートします。
3番目のステップでは、pg_restore
を実行するために、TCPトンネルを使用してPrisma Postgresデータベースに安全に接続します。
前提条件
- 既存のPostgreSQLデータベースへの接続URL
- Aアカウント
- Node.js 18+ がインストール済み
- バックアップの作成と復元のためのPostgreSQL CLIツール (
pg_dump
、pg_restore
)
1. 新しいPrisma Postgresデータベースを作成する
新しいPrisma Postgresデータベースを作成するには、次の手順に従ってください。
- ログインしてコンソールを開きます。
- 任意のワークスペースで、新規プロジェクトボタンをクリックします。
- 名前フィールドにプロジェクト名を入力します。例:hello-ppg。
- Prisma Postgresセクションで、開始するボタンをクリックします。
- リージョンドロップダウンで、現在の場所に最も近いリージョンを選択します。例:米国東部(バージニア北部)。
- プロジェクトを作成ボタンをクリックします。
データベースがプロビジョニングされたら、データベースアクセスを設定セクションでPrisma Postgres接続URLを見つけて保存します。ステップ3で必要になります。
2. 既存のデータベースからデータをエクスポートする
このステップでは、既存のデータベースからデータをエクスポートし、ローカルマシンの.bak
ファイルに保存します。
既存のデータベースの接続URLが準備できていることを確認してください。これはこのような構造になっているはずです。
postgresql://USER:PASSWORD@HOST:PORT/DATABASE
適切な接続文字列を決定するのに役立つプロバイダー固有の手順については、以下を展開してください。
Neon
- 接続プーリングトグルをオフにして、非プール接続文字列を選択してください。
sslmode
はrequire
に設定し、コマンドが機能するようにNeonデータベースURLに追加する必要があります。- 接続URLは次のようになります。
postgresql://USER:PASSWORD@YOUR-NEON-HOST/DATABASE?sslmode=require
Supabase
- Supavisorセッションモードを使用するデータベース接続URLを使用してください。
- 接続URLは次のようになります。
postgres://postgres.apbkobhfnmcqqzqeeqss:[YOUR-PASSWORD]@aws-0-ca-central-1.pooler.supabase.com:5432/postgres
次に、次のコマンドを実行してPostgreSQLデータベースのデータをエクスポートします(__DATABASE_URL__
プレースホルダーを実際のデータベース接続URLに置き換えてください)。
pg_dump \
-Fc \
-v \
-d __DATABASE_URL__ \
-n public \
-f db_dump.bak
このコマンドに使用されたCLIオプションの簡単な概要を以下に示します。
-Fc
:pg_restore
に推奨されるカスタム形式をバックアップに使用します。-v
:pg_dump
をverboseモードで実行します。-d
:データベース接続文字列を指定します。-n
:ターゲットPostgreSQLスキーマを指定します。-f
:バックアップファイルの出力名を指定します。
このコマンドを実行すると、db_dump.bak
という名前のバックアップファイルが作成されます。これは、次のステップでPrisma Postgresデータベースにデータを復元するために使用します。
3. Prisma Postgresにデータをインポートする
このステップでは、TCPトンネルを使用してPrisma Postgresインスタンスに接続し、pg_restore
を使用してデータをインポートします。
ステップ1からのPrisma Postgres接続URLも必要です。これは次のようになります。
prisma+postgres://accelerate.prisma-data.net/?api_key=ey...
現在のディレクトリにDATABASE_URL
が設定された.env
ファイルが既にある場合、トンネルCLIは自動的にそれを取得するため、手動でエクスポートする必要はありません。ただし、.env
ファイルをセットアップしていない場合は、DATABASE_URL
環境変数を明示的に設定する必要があります。
環境変数を設定するには、ターミナルを開き、DATABASE_URL
環境変数をPrisma PostgresデータベースURLの値に設定します(__API_KEY__
プレースホルダーを実際のデータベース接続URLのAPIキーに置き換えてください)。
export DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=__API_KEY__"
ターミナルでDATABASE_URL
を明示的に設定した場合、その値は.env
ファイルの値よりも優先されます。
次に、TCPトンネルを開始します。
npx @prisma/ppg-tunnel --host 127.0.0.1 --port 5433
Prisma Postgres auth proxy listening on 127.0.0.1:5433 🚀
Your connection is authenticated using your Prisma Postgres API key.
...
==============================
hostname: 127.0.0.1
port: 5433
username: <anything>
password: <none>
==============================
トンネルプロセスが実行され続け、接続が開いたままになるように、現在のターミナルウィンドウまたはタブを開いたままにしてください。
次に、前のステップのdb_dump.bak
バックアップファイルを使用して、pg_restore
コマンドでPrisma Postgresデータベースにデータを復元します。
PGSSLMODE=disable \
pg_restore \
-h 127.0.0.1 \
-p 5433 \
-v \
-d postgres \
./db_dump.bak \
&& echo "-complete-"
TCPトンネルはPrisma Postgres接続URLのAPIキーを介して既に認証されているため、このコマンドにユーザー名とパスワードの認証情報を提供する必要はありません。
これで、既存のPostgreSQLデータベースからPrisma Postgresへのデータインポートが正常に完了しました 🎉
インポートが機能したことを検証するには、Prisma Studioを使用できます。プロジェクトの左側のサイドナビにあるStudioタブをクリックして開くか、次のコマンドを実行してPrisma Studioをローカルで起動します。をクリックして開くか、次のコマンドを実行してPrisma Studioをローカルで起動します。
npx prisma studio
4. Prisma Postgresにクエリを実行するようにアプリケーションコードを更新する
シナリオA:Prisma ORMを既に使用している場合
Prisma ORMを既に使用している場合、必要な操作は次のとおりです。
- Prisma Accelerate拡張機能をプロジェクトに追加する
- データベース接続URLを更新し、Prisma Clientを再生成する
4.A.1. Prisma Accelerate拡張機能を追加する
Prisma Accelerate拡張機能は、Prisma Postgresを使用する場合に必須です。Prisma ORMでPrisma Accelerateを現在使用していない場合は、次の手順に従ってPrisma ORMをPrisma Postgresで動作するようにしてください。
まず、@prisma/extension-accelerate
パッケージをプロジェクトにインストールします。
npm install @prisma/extension-accelerate
次に、拡張機能をPrisma Clientインスタンスに追加します。
import { withAccelerate } from '@prisma/extension-accelerate'
const prisma = new PrismaClient().$extends(withAccelerate())
4.A.2. データベース接続URLを更新する
データベース接続URLは、schema.prisma
ファイルのdatasource
ブロックのurl
を介して構成されます。最も一般的には、DATABASE_URL
という名前の環境変数を介して設定されます。
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
次のステップでは、.env
ファイルを使用してDATABASE_URL
環境変数を設定することを前提としています(そうでない場合は、任意の適切な方法で環境変数を設定できます)。
.env
を開き、DATABASE_URL
環境変数の値をPrisma Postgres接続URLに合わせて更新します。これは次のようになります。
DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=__API_KEY__"
最後のステップとして、更新された環境変数が有効になり、クエリが今後Prisma Postgresに送信されるように、Prisma Clientを再生成する必要があります。
npx prisma generate --no-engine
これが完了したら、アプリケーションを実行すると、以前と同じように動作するはずです。
シナリオB:Prisma ORMをまだ使用していない場合
Prisma ORMをまだ使用していない場合は、アプリケーションからPrisma Postgresを使用するために、次の手順を実行する必要があります。
- Prisma CLIをプロジェクトにインストールする
- データベースをイントロスペクションしてPrismaスキーマを生成する
- Prisma Clientを生成する
- Prisma ORMを使用するようにアプリケーションのクエリを更新する
このプロセスの詳細なステップバイステップの手順については、このガイドを参照してください:既存のプロジェクトにPrisma ORMを追加する。