既存のデータベースからインポート
このガイドでは、既存のMySQLデータベースからPrisma Postgresにデータをインポートするためのステップバイステップの手順を説明します。
この移行は4つのステップで実行できます
- 新しいPrisma Postgresデータベースを作成します。
@prisma/ppg-tunnel
パッケージを使用して、Prisma Postgresインスタンスに直接接続します。- pgloaderを使用して、MySQLデータをPrisma Postgresに移行します。
- PrismaプロジェクトをPrisma Postgres用に構成します。
前提条件
- 既存のMySQLデータベースへの接続URL。
- Aアカウント。
- Node.js 18+ がインストール済みであること。
- pgloader がインストール済みであること。
この移行は、別のgit開発ブランチで試みることをお勧めします。
1. 新しいPrisma Postgresデータベースを作成する
新しいPrisma Postgresデータベースを作成するには、以下の手順に従ってください
- ログインしてコンソールを開きます。
- 任意のワークスペースで、New projectボタンをクリックします。
- Nameフィールドにプロジェクトの名前を入力します。例:hello-ppg。
- Prisma Postgresセクションで、Get startedボタンをクリックします。
- Regionドロップダウンで、現在の場所に最も近いリージョンを選択します。例:US East (N. Virginia)。
- Create projectボタンをクリックします。
データベースがプロビジョニングされたら、Set up database accessセクションでPrisma Postgres接続URLを見つけて保存してください。次のステップで必要になります。
2. Prisma Postgresインスタンスに直接接続する
このステップでは、安全なTCPトンネルを使用してPrisma Postgresインスタンスに接続します。
ステップ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
ファイルの値よりも優先されます。
次に、@prisma/ppg-tunnel
パッケージを使用してTCPトンネルを開始するには、次のコマンドを実行します。
npx @prisma/ppg-tunnel --host 127.0.0.1 --port 5433
--port
および--host
フラグを使用して独自のホストとポートの値を指定することにより、別のホストとポートを指定できます。ガイド全体を通して同じホストとポートの値を一貫して使用してください。
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>
==============================
現在のターミナルウィンドウまたはタブを開いたままにしてください。これにより、トンネルプロセスが実行し続け、接続が開いたままになります。
3. pgloaderを使用してMySQLデータをPrisma Postgresに移行する
Prisma Postgresインスタンスへのアクティブな接続が確立されたので、pgloaderを使用してMySQLデータベースからPrisma Postgresにデータをエクスポートします。
別のターミナルウィンドウを開き、config.load
ファイルを作成します
touch config.load
好みのテキストエディタでconfig.load
ファイルを開き、次の構成をコピー&ペーストします
LOAD DATABASE
FROM mysql://username:password@host:PORT/database_name
INTO postgresql://user:password@127.0.0.1:5433/postgres
WITH quote identifiers, -- preserve table/column name case by quoting them
include drop,
create tables,
create indexes,
reset sequences
ALTER SCHEMA 'database_name' RENAME TO 'public';
config.load
ファイルで次の詳細を更新してください
FROM
url (MySQLデータベースURL)username
、password
、host
、PORT
、およびdatabase_name
を、MySQLデータベースの実際の接続詳細に置き換えます。- SSLが必要な場合は、接続文字列に
useSSL=true
が含まれていることを確認してください。例:mysql://username:password@host:PORT/database_name?useSSL=true
。 PlanetScaleを使用する場合、sslaccept=strict
を追加しても機能しないことに注意してください。
INTO
url (PostgresデータベースURL)- カスタムの
host
とport
を使用している場合は、TCPトンネルの詳細でこれを更新します(この例では、一貫性のために127.0.0.1
とポート5433
です)。
- カスタムの
ALTER SCHEMA 'database_name' RENAME TO 'public';
のdatabase_name
を、MySQL接続文字列のdatabase_name
と完全に一致するように更新します。
更新された認証情報で構成ファイルを保存した後、同じターミナルウィンドウで次のコマンドを実行します
pgloader config.load
データが正常に移行されたことを確認する、これに似たログが表示されるはずです
LOG report summary reset
table name errors rows bytes total time
------------------------- --------- --------- --------- --------------
fetch meta data 0 9 2.546s
Create Schemas 0 0 0.325s
Create SQL Types 0 0 0.635s
Create tables 0 6 5.695s
Set Table OIDs 0 3 0.328s
------------------------- --------- --------- --------- --------------
public.post 0 8 0.5 kB 4.255s
public."user" 0 4 0.1 kB 2.775s
public._prisma_migrations 0 1 0.2 kB 4.278s
------------------------- --------- --------- --------- --------------
COPY Threads Completion 0 4 5.095s
Index Build Completion 0 5 9.601s
Create Indexes 0 5 4.116s
Reset Sequences 0 2 4.540s
Primary Keys 0 3 2.917s
Create Foreign Keys 0 1 1.121s
Create Triggers 0 0 0.651s
Install Comments 0 0 0.000s
------------------------- --------- --------- --------- --------------
Total import time ✓ 13 0.8 kB 28.042s
このような出力が表示された場合、データがPrisma Postgresインスタンスに正常にエクスポートされたことを意味します。
Prisma Studioを使用して、移行が成功したかどうかを確認することもできます
npx prisma studio
4. PrismaプロジェクトをPrisma Postgres用に構成する
データを移行した後、PrismaプロジェクトをPrisma Postgresで動作するように設定する必要があります。手順は、Prisma ORMを既に使用していたかどうかによって異なります。
以前にPrisma ORMを使用していなかった場合
プロジェクトディレクトリでnpx prisma init
を実行して、プロジェクトでPrismaを初期化します。これにより、schema.prisma
ファイルと.env
ファイル(まだ存在しない場合)を含むprisma
フォルダーが作成されます。
生成された.env
ファイルで、ステップ1で受け取ったPrisma Postgres接続文字列と一致するようにDATABASE_URL
を更新します。
DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=__API_KEY__"
実行して、新しく移行したデータベースをイントロスペクションします
npx prisma db pull
このコマンドは、移行されたテーブルを表すモデルでschema.prisma
ファイルを更新するため、Prisma Clientを使用してデータのクエリを開始したり、Prisma Migrateを使用して将来の変更を管理したりできます。
おめでとうございます! MySQLデータベースからPrisma Postgresへの移行と、Prismaプロジェクトの構成が正常に完了しました。移行チュートリアルはこれで完了です。
PrismaとPrisma Postgresの開始方法に関する包括的なガイドについては、PrismaとPrisma Postgresを最初から始めるを参照してください。
既にPrisma ORMを使用していた場合
schema.prisma
ファイルで、datasource
ブロックのprovider
をmysql
からpostgresql
に変更します
datasource db {
provider = "mysql"
provider = "postgres"
url = env("DATABASE_URL")
}
生成された.env
ファイルで、ステップ1で受け取った新しいPrisma Postgres接続文字列と一致するようにDATABASE_URL
を更新します。
DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=__API_KEY__"
新しく移行したPrisma Postgresデータベースをイントロスペクションし、Prisma Clientを生成します
npx prisma db pull
このコマンドは、新しいデータベーススキーマに基づいてPrismaモデルを更新します。
以前にPrisma Migrateを使用していた場合
prisma
ディレクトリにある既存のmigrations
フォルダーを削除します。- 新しい移行の作成を開始するには、データベースをベースライン化します。
おめでとうございます! MySQLデータベースからPrisma Postgresへの移行と、Prismaプロジェクトの構成が正常に完了しました。移行チュートリアルはこれで完了です。