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

制限事項と既知の問題

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ブロックにあるproviderurlパラメータを変更する
  • 既存のマイグレーション履歴をアーカイブまたは削除する (./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は、CLIコマンドをDocker、Nodeスクリプト、またはbashシェルなどの非インタラクティブ環境で実行していることを検出します。この場合、環境が非インタラクティブであり、migrate dev コマンドがサポートされていないことを示す警告が表示されます。

Docker環境がコマンドを認識するようにするには、interactiveモードでイメージを実行し、migrate devコマンドに反応するようにしてください。

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

# Example usage
docker run -it node
© . All rights reserved.