限制和已知问题
以下限制适用于 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.
为了手动切换数据库提供程序,您必须
- 更改
schema.prisma
中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 问题 #6485 以获取更新。
非交互式环境中的 Prisma Migrate
Prisma ORM 会检测您是否在非交互式环境(例如 Docker、Node 脚本或 bash shell)中运行 CLI 命令。在这种情况下,会显示一个警告,表明环境是非交互式的,并且不支持 migrate dev
命令。
要确保 Docker 环境拾取命令,请在 interactive
模式下运行映像,以便它对 migrate dev
命令做出反应。
docker run --interactive --tty <image name>
# or
docker -it <image name>
# Example usage
docker run -it node