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

制限事項と既知の問題

以下の制限事項はPrisma Migrateに適用されます。

MongoDBコネクタはサポートされていません

Prisma Migrateは現在、MongoDBコネクタをサポートしていません。

データベースプロバイダーを自動的に切り替えることはできません

Prisma Migrateは、プロバイダーに固有のSQLファイルを生成します。これは、移行の構文に互換性がないため、本番環境のPostgreSQLと開発環境のSQLiteに同じ移行ファイルを使用できないことを意味します。

2.15.0 以降、Prisma Migrateは、移行が構成されたプロバイダーと一致しない場合を検出し、役立つエラーメッセージを出力します。たとえば、移行がPostgreSQLデータベース用であるにもかかわらず、providermysqlに設定されている場合などです。

Error: P3014

The datasource provider `postgresql` specified in your schema does not match the one specified in the migration_lock.toml, mysql. Please remove your current migration directory and start a new migration history with prisma migrate dev.

データベースプロバイダーを手動で切り替えるには、以下を行う必要があります。

  • スキーマのdatasourceブロックで、providerおよびurlパラメーターを変更します
  • 既存の移行履歴をアーカイブまたは削除します - ./prisma/migrationsフォルダーが存在してはなりません
  • prisma migrate devを実行して、新しい移行履歴を開始します

最後のステップでは、空のデータベースから現在のschema.prismaに移行する新しい初期移行が作成されます。注意点:

  • この移行には、schema.prismaに反映されているもの*のみ*が含まれます。以前の移行ファイルを手動で編集してカスタムSQLを追加した場合、再度自分で追加する必要があります。
  • 新しいプロバイダーを使用して新しく作成されたデータベースには、データは含まれません。

データベースのリセット時のデータ損失

開発環境では、Prisma Migrateはデータベースのリセットを求めることがあります。リセットすると、データベースがドロップされて再作成されるため、データが失われます。データベースは、次の場合にリセットされます。

  • prisma migrate resetを明示的に呼び出す場合
  • prisma migrate devを呼び出し、Prisma Migrateがデータベースのドリフトまたは移行履歴の競合を検出した場合

prisma migrate devおよびprisma migrate resetコマンドは、**開発環境でのみ**使用するように設計されており、本番データには影響を与えないはずです。

データベースがリセットされると、Prisma Migrateがpackage.jsonにシードスクリプトを検出した場合、シーディングがトリガーされます。

注意: データベースがリセットされたときにデータを再作成する簡単で統合された方法については、シーディングガイドを確認してください。

Prisma MigrateとPgBouncer

PgBouncerを接続プーリングに使用する環境でPrisma Migrateコマンドを実行しようとすると、次のエラーが表示される場合があります

Error: undefined: Database error
Error querying the database: db error: ERROR: prepared statement "s0" already exists

詳細と回避策については、Prisma MigrateとPgBouncerの回避策を参照してください。更新については、GitHub issue #6485をフォローしてください。

非対話型環境でのPrisma Migrate

Prisma ORMは、Docker、Nodeスクリプト、bashシェルなどの非対話型環境でCLIコマンドを実行すると、それを検出します。この場合、環境が非対話型であり、migrate devコマンドがサポートされていないことを示す警告が表示されます。

Docker環境がコマンドを確実に取得するようにするには、interactiveモードでイメージを実行して、migrate devコマンドに反応するようにします。

docker run --interactive --tty <image name>
# or
docker -it <image name>

# Example usage
docker run -it node