迁移
为 prisma-client-rust
和 prisma-client-rust-cli
启用 migrations
特性将导致生成的客户端公开一些用于使用 Prisma 的 迁移引擎 (在新标签页中打开) 的方法。具体来说,Prisma CLI 的 db push
、migrate deploy
和 migrate resolve
函数将在客户端中具有等效函数。
除非您无法使用 Prisma CLI(例如,对于使用 Tauri (在新标签页中打开) 构建的桌面应用程序)和 CLI 不可用 的服务器部署,否则不建议以这种方式使用迁移引擎。当 CLI 可用时,请手动或在 CI 中使用它来部署迁移。
开发中
在修改 Prisma 模式时,使用 PrismaClient::_db_push
来同步您的数据库和模式。如 Prisma 文档 (在新标签页中打开) 中所述,这不会使用迁移,而是将模式的状态直接推送到数据库。
_db_push
返回一个构建器,该构建器具有指定 CLI 中可用其他选项的其他函数。
client
._db_push()
.accept_data_loss() // --accept-data-loss in CLI
.force_reset() // --force-reset in CLI
.await?;
生产环境
在您完成模式更改并通过 CLI 生成迁移后,使用 PrismaClient::_migrate_deploy
使用迁移引擎应用所有挂起的迁移(Prisma 文档 (在新标签页中打开))。
基线
Prisma 提供了对现有数据库进行基线以使其与 Prisma 迁移兼容的功能。基线过程在此处将不会详细介绍,因为 Prisma 文档 (在新标签页中打开) 已经很好地解释了它。
PrismaClient::_migrate_resolve
作为 CLI 的 migrate resolve
命令的代码内替代方案可用。它需要指定迁移名称作为其第一个参数。
client
._migrate_resolve("20210426141759_initial-migration-for-db")
.await?;
示例
新项目
以下迁移设置可用于使用 Prisma Client Rust 的新应用程序。由于数据库没有现有迁移,因此不需要基线。
在开发期间,_db_push
将用于同步模式和数据库而无需生成迁移。如果对模式进行了重大更改,则可能需要偶尔添加 accept_data_loss
或 force_reset
。模式更改完成后,必须使用 CLI 的 migrate dev
命令生成迁移。
在发布模式下运行应用程序时,_migrate_deploy
将用于应用 migrate dev
生成的所有迁移。
#[cfg(debug_assertions)]
client._db_push().await?;
#[cfg(not(debug_assertions))]
client._migrate_deploy().await?;
现有项目
对于从使用其他 ORM 或原始 SQL 切换的项目,可以采用与新项目类似的方法,但必须进行 基线 (在新标签页中打开)。
将数据库模式自省到 schema.prisma
文件后,使用 migrate dev
生成初始迁移,然后在应用进一步迁移之前,在 _migrate_resolve
中使用该迁移的名称。
client
._migrate_resolve("INITIAL MIGRATION NAME")
.await?;
#[cfg(debug_assertions)]
client._db_push().await?;
#[cfg(not(debug_assertions))]
client._migrate_deploy().await?;