跳至主要内容

限制和已知问题

以下限制适用于 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 块中的 providerurl 参数
  • 存档或删除您现有的迁移历史记录 - 不得存在 ./prisma/migrations 文件夹
  • 运行 prisma migrate dev 以开始新的迁移历史记录

最后一步会创建一个新的初始迁移,该迁移从空数据库到您当前的 schema.prisma。请注意

  • 此迁移包含 schema.prisma 中反映的内容。如果您手动编辑了以前的迁移文件以添加自定义 SQL,则需要再次自行添加。
  • 使用新提供程序创建的新数据库不包含任何数据。

重置数据库时的数据丢失

在开发环境中,Prisma Migrate 有时会提示您重置数据库。重置会删除并重新创建数据库,从而导致数据丢失。当发生以下情况时,数据库将被重置

  • 您显式调用 prisma migrate reset
  • 您调用 prisma migrate dev,并且 Prisma Migrate 检测到数据库中的漂移或迁移历史记录冲突

prisma migrate devprisma 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 环境拾取该命令,请以 交互式 模式运行映像,以便它对 migrate dev 命令做出反应。

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

# Example usage
docker run -it node