制限事項と既知の問題
以下の制限事項はPrisma Migrateに適用されます。
MongoDBコネクタはサポートされていません
Prisma Migrateは現在、MongoDBコネクタをサポートしていません。
データベースプロバイダーを自動的に切り替えることはできません
Prisma Migrateは、プロバイダーに固有のSQLファイルを生成します。これは、移行の構文に互換性がないため、本番環境のPostgreSQLと開発環境のSQLiteに同じ移行ファイルを使用できないことを意味します。
2.15.0 以降、Prisma Migrateは、移行が構成されたプロバイダーと一致しない場合を検出し、役立つエラーメッセージを出力します。たとえば、移行がPostgreSQLデータベース用であるにもかかわらず、provider
がmysql
に設定されている場合などです。
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