メインコンテンツにスキップ

既存のデータベースからインポート

このガイドでは、既存のPostgreSQLデータベースからPrisma Postgresにデータをインポートするためのステップバイステップの手順を説明します。

この移行は3つのステップで完了できます。

  1. 新しいPrisma Postgresデータベースを作成します。
  2. pg_dumpを使用して既存のデータをエクスポートします。
  3. pg_restoreを使用して、以前にエクスポートしたデータをPrisma Postgresにインポートします。

3番目のステップでは、pg_restoreを実行するために、TCPトンネルを使用してPrisma Postgresデータベースに安全に接続します。

前提条件

  • 既存のPostgreSQLデータベースへの接続URL
  • Aアカウント
  • Node.js 18+ がインストール済み
  • バックアップの作成と復元のためのPostgreSQL CLIツール (pg_dumppg_restore)

1. 新しいPrisma Postgresデータベースを作成する

新しいPrisma Postgresデータベースを作成するには、次の手順に従ってください。

  1. ログインしてコンソールを開きます。
  2. 任意のワークスペースで、新規プロジェクトボタンをクリックします。
  3. 名前フィールドにプロジェクト名を入力します。例:hello-ppg
  4. Prisma Postgresセクションで、開始するボタンをクリックします。
  5. リージョンドロップダウンで、現在の場所に最も近いリージョンを選択します。例:米国東部(バージニア北部)
  6. プロジェクトを作成ボタンをクリックします。

データベースがプロビジョニングされたら、データベースアクセスを設定セクションでPrisma Postgres接続URLを見つけて保存します。ステップ3で必要になります。

2. 既存のデータベースからデータをエクスポートする

このステップでは、既存のデータベースからデータをエクスポートし、ローカルマシンの.bakファイルに保存します。

既存のデータベースの接続URLが準備できていることを確認してください。これはこのような構造になっているはずです。

postgresql://USER:PASSWORD@HOST:PORT/DATABASE

適切な接続文字列を決定するのに役立つプロバイダー固有の手順については、以下を展開してください。

Neon

  • 接続プーリングトグルをオフにして、非プール接続文字列を選択してください。
  • sslmoderequireに設定し、コマンドが機能するように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オプションの簡単な概要を以下に示します。

  • -Fcpg_restoreに推奨されるカスタム形式をバックアップに使用します。
  • -vpg_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 
表示CLI結果
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という名前の環境変数を介して設定されます。

schema.prisma
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を使用するために、次の手順を実行する必要があります。

  1. Prisma CLIをプロジェクトにインストールする
  2. データベースをイントロスペクションしてPrismaスキーマを生成する
  3. Prisma Clientを生成する
  4. Prisma ORMを使用するようにアプリケーションのクエリを更新する

このプロセスの詳細なステップバイステップの手順については、このガイドを参照してください:既存のプロジェクトにPrisma ORMを追加する