跳到主要内容

限制与已知问题

以下限制适用于 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 中 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 issue #6485 以获取更新。

非交互式环境中的 Prisma Migrate

当你从 Node 脚本或 bash shell 等非交互式环境中(例如 Docker)运行 CLI 命令时,Prisma ORM 会检测到。发生这种情况时,将显示警告,指示环境是非交互式的,并且 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.