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

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

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

この移行は4つのステップで実行できます

  1. 新しいPrisma Postgresデータベースを作成します。
  2. @prisma/ppg-tunnel パッケージを使用して、Prisma Postgresインスタンスに直接接続します。
  3. pgloaderを使用して、MySQLデータをPrisma Postgresに移行します。
  4. PrismaプロジェクトをPrisma Postgres用に構成します。

前提条件

  • 既存のMySQLデータベースへの接続URL。
  • Aアカウント。
  • Node.js 18+ がインストール済みであること。
  • pgloader がインストール済みであること。

この移行は、別のgit開発ブランチで試みることをお勧めします。

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

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

  1. ログインしてコンソールを開きます。
  2. 任意のワークスペースで、New projectボタンをクリックします。
  3. Nameフィールドにプロジェクトの名前を入力します。例:hello-ppg
  4. Prisma Postgresセクションで、Get startedボタンをクリックします。
  5. Regionドロップダウンで、現在の場所に最も近いリージョンを選択します。例:US East (N. Virginia)
  6. 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フラグを使用して独自のホストとポートの値を指定することにより、別のホストとポートを指定できます。ガイド全体を通して同じホストとポートの値を一貫して使用してください。

表示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>
==============================
注意

現在のターミナルウィンドウまたはタブを開いたままにしてください。これにより、トンネルプロセスが実行し続け、接続が開いたままになります。

3. pgloaderを使用してMySQLデータをPrisma Postgresに移行する

Prisma Postgresインスタンスへのアクティブな接続が確立されたので、pgloaderを使用してMySQLデータベースからPrisma Postgresにデータをエクスポートします。

別のターミナルウィンドウを開き、config.loadファイルを作成します

touch config.load

好みのテキストエディタで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)
    • usernamepasswordhostPORT、およびdatabase_nameを、MySQLデータベースの実際の接続詳細に置き換えます。
    • SSLが必要な場合は、接続文字列にuseSSL=trueが含まれていることを確認してください。例:mysql://username:password@host:PORT/database_name?useSSL=true。 PlanetScaleを使用する場合、sslaccept=strictを追加しても機能しないことに注意してください。
  • INTO url (PostgresデータベースURL)
    • カスタムのhostportを使用している場合は、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を更新します。

.env
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ブロックのprovidermysqlからpostgresqlに変更します

schema.prisma
datasource db {
provider = "mysql"
provider = "postgres"
url = env("DATABASE_URL")
}

生成された.envファイルで、ステップ1で受け取った新しいPrisma Postgres接続文字列と一致するようにDATABASE_URLを更新します。

.env
DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=__API_KEY__"

新しく移行したPrisma Postgresデータベースをイントロスペクションし、Prisma Clientを生成します

npx prisma db pull

このコマンドは、新しいデータベーススキーマに基づいてPrismaモデルを更新します。

以前にPrisma Migrateを使用していた場合

おめでとうございます! MySQLデータベースからPrisma Postgresへの移行と、Prismaプロジェクトの構成が正常に完了しました。移行チュートリアルはこれで完了です。

移行中に問題が発生した場合は、DiscordまたはXでお気軽にお問い合わせください。