额外
迁移

迁移

prisma-client-rustprisma-client-rust-cli 启用 migrations 特性将导致生成的客户端公开一些用于使用 Prisma 的 迁移引擎 (在新标签页中打开) 的方法。具体来说,Prisma CLI 的 db pushmigrate deploymigrate 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_lossforce_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?;