データベースのベースライン化
ベースライン化とは、以下のデータベースのマイグレーション履歴を初期化するプロセスです。
- ✔ Prisma Migrateの使用開始前から存在していた
- ✔ (本番環境のように)維持しなければならないデータを含んでおり、データベースをリセットできない
ベースライン化は、Prisma Migrateに1つ以上のマイグレーションがすでに適用されていると想定させます。これにより、生成されたマイグレーションが、既に存在するテーブルやフィールドを作成しようとして失敗するのを防ぎます。
注:開発データベースをリセットしてシードすることは許容されると想定しています。
ベースライン化は、既存のデータベースを持つプロジェクトにPrisma Migrateを追加するプロセスの一部です。
ベースライン化が必要な理由
既存のプロジェクトにPrisma Migrateを追加すると、最初のマイグレーションには、Prisma Migrateの使用を開始する前のデータベースの状態を再作成するために必要なすべてのSQLが含まれます。
ストアドプロシージャやトリガーなど、Prismaスキーマでは表現できないスキーマ要素を含めるように、最初のマイグレーションを編集できます。
開発環境を作成およびリセットするには、この最初のマイグレーションが必要です。
ただし、既存のデータベース(本番環境など)にマイグレーションをprisma migrate deploy
する際、リセットできない場合は、最初のマイグレーションを含めたくないでしょう。
ターゲットデータベースには、最初のマイグレーションによって作成されたテーブルとカラムが既に含まれており、これらの要素を再度作成しようとすると、ほとんどの場合エラーが発生します。
ベースライン化は、Prisma Migrateに最初のマイグレーションがすでに適用されていると見せかけることで、この問題を解決します。
データベースのベースライン化
ベースラインマイグレーションを作成するには
-
prisma/migrations
フォルダがある場合は、このフォルダを削除、移動、名前変更、またはアーカイブしてください。 -
次のコマンドを実行して、任意の名前で
migrations
ディレクトリ内に作成します。この例では、マイグレーション名に0_init
を使用します。mkdir -p prisma/migrations/0_init
情報0_
が重要なのは、Prisma Migrateがマイグレーションを辞書式順序で適用するためです。現在のタイムスタンプなど、別の値を使用することもできます。 -
prisma migrate diff
を使用してマイグレーションを生成し、ファイルに保存します。npx prisma migrate diff \
--from-empty \
--to-schema-datamodel prisma/schema.prisma \
--script > prisma/migrations/0_init/migration.sql -
無視すべき各マイグレーションに対して
prisma migrate resolve
コマンドを実行します。npx prisma migrate resolve --applied 0_init
このコマンドは、ターゲットマイグレーションを_prisma_migrations
テーブルに追加し、「適用済み」としてマークします。新しいマイグレーションを適用するためにprisma migrate deploy
を実行すると、Prisma Migrateは次のようになります。
- ベースラインマイグレーションを含む、「適用済み」とマークされたすべてのマイグレーションをスキップします。
- ベースラインマイグレーション後に発生する新しいマイグレーションを適用します。