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

データベースのベースライン化

ベースライン化とは、以下のデータベースのマイグレーション履歴を初期化するプロセスです。

  • ✔ Prisma Migrateの使用開始前から存在していた
  • ✔ (本番環境のように)維持しなければならないデータを含んでおり、データベースをリセットできない

ベースライン化は、Prisma Migrateに1つ以上のマイグレーションがすでに適用されていると想定させます。これにより、生成されたマイグレーションが、既に存在するテーブルやフィールドを作成しようとして失敗するのを防ぎます。

:開発データベースをリセットしてシードすることは許容されると想定しています。

ベースライン化は、既存のデータベースを持つプロジェクトにPrisma Migrateを追加するプロセスの一部です。

警告

このガイドはMongoDBには適用されません
migrate deployの代わりに、db pushMongoDBに用いられます。

ベースライン化が必要な理由

既存のプロジェクトにPrisma Migrateを追加すると、最初のマイグレーションには、Prisma Migrateの使用を開始する前のデータベースの状態を再作成するために必要なすべてのSQLが含まれます。

The image shows a database labelled 'Existing database', and a list of existing database features next to it - 24 tables, 13 relationships, 92 fields, 3 indexes. An arrow labelled 'represented by' connects the database features list to a box that represents a migration. The existing databases's features are represented by a single migration.

ヒント

ストアドプロシージャやトリガーなど、Prismaスキーマでは表現できないスキーマ要素を含めるように、最初のマイグレーションを編集できます。

開発環境を作成およびリセットするには、この最初のマイグレーションが必要です。

The image shows a migration history with three migrations. Each migration is represented by a file icon and a name, and all migrations are surrounded by a box labelled 'migration history'. The first migration has an additional label: "State of database before Prisma Migrate", and the two remaining migrations are labelled "Generated as part of the Prisma Migrate workflow". An arrow labelled "prisma migrate dev" connects the migration history box to a database labelled "new development database", signifying that all three migrations are applied to the development database - none are skipped.

ただし、既存のデータベース(本番環境など)にマイグレーションをprisma migrate deployする際、リセットできない場合は、最初のマイグレーションを含めたくないでしょう。

ターゲットデータベースには、最初のマイグレーションによって作成されたテーブルとカラムが既に含まれており、これらの要素を再度作成しようとすると、ほとんどの場合エラーが発生します。

A migration history represented by three migration files (file icon and name), surrounded by a a box labelled 'migration history'. The first migration is marked 'do not apply', and the second two migrations are marked 'apply'. An arrow labelled with the command 'prisma migrate deploy' points from the migration history to a database labelled 'production'.

ベースライン化は、Prisma Migrateに最初のマイグレーションがすでに適用されていると見せかけることで、この問題を解決します。

データベースのベースライン化

ベースラインマイグレーションを作成するには

  1. prisma/migrationsフォルダがある場合は、このフォルダを削除、移動、名前変更、またはアーカイブしてください。

  2. 次のコマンドを実行して、任意の名前でmigrationsディレクトリ内に作成します。この例では、マイグレーション名に0_initを使用します。

    mkdir -p prisma/migrations/0_init
    情報

    0_が重要なのは、Prisma Migrateがマイグレーションを辞書式順序で適用するためです。現在のタイムスタンプなど、別の値を使用することもできます。

  3. prisma migrate diffを使用してマイグレーションを生成し、ファイルに保存します。

    npx prisma migrate diff \
    --from-empty \
    --to-schema-datamodel prisma/schema.prisma \
    --script > prisma/migrations/0_init/migration.sql
  4. 無視すべき各マイグレーションに対してprisma migrate resolveコマンドを実行します。

    npx prisma migrate resolve --applied 0_init

このコマンドは、ターゲットマイグレーションを_prisma_migrationsテーブルに追加し、「適用済み」としてマークします。新しいマイグレーションを適用するためにprisma migrate deployを実行すると、Prisma Migrateは次のようになります。

  1. ベースラインマイグレーションを含む、「適用済み」とマークされたすべてのマイグレーションをスキップします。
  2. ベースラインマイグレーション後に発生する新しいマイグレーションを適用します。
© . All rights reserved.