限制与已知问题
以下限制适用于 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
块里的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
当你从 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