2021 年 3 月 16 日

使用 Prisma Migrate 实现无忧数据库迁移

Prisma Migrate 可帮助开发人员在开发的每个阶段(从原型设计到生产)演变其数据库架构。今天,我们很高兴推出正式发布的 Prisma Migrate! 试试看。

Hassle-Free Database Migrations with Prisma Migrate

目录

使用 Prisma Migrate 进行数据库模式迁移

当今的数据驱动应用程序需要不断变化。在使用关系数据库时,管理不断演变的模式可能是一项挑战。

Prisma Migrate 是一种数据库模式迁移工具,可以简化数据库模式与应用程序的同步演变。它使模式更改可预测且易于验证和执行——特别是对于在项目上协作的团队。

在运行 Prisma Migrate 的实验版和预览版一年多并收集了我们社区的大量有益反馈后,我们很高兴推出正式发布的 Prisma Migrate 🎉。

具有完全控制的可预测模式迁移

数据库模式迁移在软件开发工作流程中起着至关重要的作用,并影响应用程序最关键的组件——数据库。我们构建 Migrate 的目的是使其具有可预测性,同时允许您控制如何执行数据库模式更改。

Prisma Migrate 根据您对 Prisma 模式所做的更改生成纯 SQL 文件形式的迁移——这是您所需的数据库模式的声明性定义。生成的 SQL 迁移是完全可自定义的,允许您使用任何底层数据库功能,例如操作支持迁移的数据、设置触发器、存储过程和视图。

与需要逐行手动编写 SQL 迁移的其他迁移工具相比,使用 Migrate,大多数迁移可以在“自动驾驶”模式下完成,并在需要时通过 SQL 进行可选的完全控制。

Prisma Migrate 通过自动化编写数据库迁移中重复且容易出错的方面,同时让您对它们的执行方式拥有最终决定权,从而在生产力和控制之间取得平衡。


查看高级迁移场景指南

数据库的版本控制

使用 Prisma Migrate,生成的迁移可以在您的 Git 存储库中进行跟踪,从而使您能够了解模式随时间的演变。此外,它简化了推理作为对应用程序的给定更改的一部分的模式更改。

使用 SQL 的好处之一是,不熟悉 Prisma 模式的团队成员仍然可以查看迁移。


了解有关使用 Prisma Migrate 进行团队开发的更多信息

携带您自己的项目

Prisma Migrate 可以在使用 PostgreSQL、MySQL、SQLite 和 SQL Server (预览版) 的现有项目中采用。这使您可以使用任何现有项目并通过 Migrate 的自动生成迁移来提高生产力。此外,您还可以生成用于类型安全数据库访问的 Prisma Client。

由于 Prisma Migrate 与语言无关,因此它可以在任何使用受支持数据库之一的项目中采用。


按照指南将 Prisma Migrate 添加到现有项目

与 Prisma Client 集成

Prisma Migrate 与 Prisma Client 集成,使用 Prisma 模式作为它们的共享真实来源。换句话说,Prisma Client 和 Prisma Migrate 生成的迁移都源自 Prisma 模式。

The Prisma schema is a single source of truth for both database schema migrations and Prisma Client which gives you end-to-end type safety

通过利用 Prisma Client 的类型安全性,这使得同步和验证应用程序代码中的数据库模式更改变得更加容易。

Prisma Migrate 已准备好投入生产

自去年发布 Prisma Migrate 的预览版以来,我们对 Prisma Migrate 的以下方面进行了改进和完善

  • 更多控制:本机类型使您可以直接从 Prisma 模式完全控制您想要使用的数据库类型。
  • 稳定性:已稳定 Migrate 的命令以支持从原型设计到生产的工作流程。
  • 生产就绪:Prisma Migrate 已经过内部和许多社区成员的严格测试,使其可以投入生产使用。

您可以将 Migrate 与 PostgreSQLMySQLSQLite 一起使用。 SQL Server 支持在预览版中提供。

有多种方法可以开始使用 Prisma Migrate


Prisma Migrate 文档

了解有关 Prisma Migrate 如何工作的更多信息


Prisma Migrate 如何工作?

Prisma Migrate 基于 Prisma 模式,其工作原理是生成针对数据库执行的 .sql 迁移文件。

Prisma 模式是模式迁移的起点,并概述了您所需的数据库最终状态。Prisma Migrate 检查 Prisma 模式中的更改,并生成必要的 .sql 迁移文件以应用。

应用迁移的方式因您是在本地进行原型设计和开发还是在生产环境中应用迁移而有很大差异。例如,在开发期间,在某些情况下可以容忍重置数据库以加快原型设计,而在生产环境中,必须格外小心以避免数据丢失和重大更改。

Prisma Migrate 通过用于本地开发和在生产环境中应用迁移的工作流程来适应这种情况。

在开发中演变模式

开发期间,有两种方法可以创建数据库模式

  • prisma db push:基于 Prisma 模式创建数据库模式,无需任何迁移。旨在在本地进行原型设计时使用。该命令目前处于预览版
  • prisma migrate dev:基于 Prisma 模式中的更改创建 SQL 迁移,应用它并生成 Prisma Client。

选择哪种方法取决于您所处的原型设计阶段。如果您开始实现新功能并希望快速尝试更改数据库模式,则 prisma db push 提供了一种快速实现该目标的方法。

一旦您对更改感到满意,prisma migrate dev 将生成 SQL 迁移并应用它

Development workflow with prisma migrate dev

这是一个显示 prisma migrate dev 运行的示例

1. 使用 Prisma 模式定义您所需的数据库模式

2. 运行 prisma migrate dev 以创建和执行迁移。

执行迁移后,您通常会将迁移文件提交到代码仓库,以便可以在其他环境中应用迁移。

对数据库模式的进一步更改遵循相同的工作流程,并从更新 Prisma 模式开始。

自定义 SQL 迁移

您可以使用以下工作流程自定义迁移 SQL

  1. 运行 prisma migrate dev --create-only 来创建 SQL 迁移,而不应用它。
  2. 编辑迁移 SQL。
  3. 运行 prisma migrate dev 来应用它。

在生产环境和其他环境中应用迁移

要将迁移应用到生产等其他环境,您需要将包含迁移的仓库的更改拉取下来,并运行以下命令

Production workflow

在 CI/CD 中运行迁移

Prisma Migrate 还可以用于在持续集成管道中应用迁移以进行测试,以及在持续交付管道中进行部署。

原则上,prisma migrate deploy CLI 命令旨在用于非交互式自动化环境,例如 GitHub Actions。当您想要启动数据库并运行迁移以运行集成测试时,这将非常有用。

迁移文档生产故障排除指南 中对此进行了更详细的介绍。


自预览版以来有哪些变化?

自预览版以来最显著的变化是引入了原生类型集成种子数据以及对云原生开发的支持。

如果您是从预览版升级,则可以从迁移脚本中删除 --preview-feature 标志。

原生数据库类型

以前,Prisma Migrate 仅支持受支持数据库中可用类型的子集。在此版本中,我们扩展了该集合,并允许您在 Prisma 模式中定义确切的数据库类型。

以前,Prisma 模式中的字段将使用 Prisma 公开的标量类型中的类型进行注释。

这些标量类型中的每一个都默认映射到特定的数据库类型。例如,String Prisma 标量类型将映射到 PostgreSQL 中的 text

在此版本中,我们通过允许您添加原生类型注释,扩展了您可以定义的受支持数据库类型的集合。

在示例中,@db.VarChar(100) 属性表示 Migrate 应使用 PostgreSQL 的 VARCHAR 类型。这在 Migrate 为模型生成的 SQL 中也是可见的

要了解有关原生类型属性的更多信息,请查看文档

集成种子数据

Migrate 内置支持 种子数据。种子数据使您能够快速使用数据引导可用的测试环境。根据您所需的方法,您可以在本地和共享环境中使用种子数据。

注意:种子数据功能仍处于预览状态,将在未来版本中稳定下来。

目前支持通过 TypeScript、JavaScript 和 Shell 编写的脚本来使用种子数据。

要使用种子数据,请在 prisma 文件夹中定义脚本并运行 prisma db seed 命令。

每当调用 prisma migrate reset 以重置和重新填充开发中的数据库时,都会自动触发种子数据功能。在调用 prisma migrate dev 后以交互方式重置数据库时也会触发此功能。当审查协作者的工作时,这尤其有用,因为它允许使用实际数据审查模式迁移。


下一步是什么

随着 Migrate 达到正式可用状态,它已准备好在生产环境中采用。但这并没有止步于此 – 我们正在继续积极开发和改进 Prisma Migrate。

例如,我们将改进 Prisma Migrate 中对列重命名的处理。

除此之外,以下路线图项目将进一步改进数据库模式的整体管理


感谢我们的社区

我们对 12 月份预览版的积极响应感到非常激动,我们要感谢所有测试并提供深刻反馈的人 – Prisma Migrate 是这些努力的成果 🙌

要开始使用 Prisma Migrate,请查看以下资源

👷‍♀️ 我们很高兴分享今天 Prisma Migrate 的正式可用性,并迫不及待地想看看大家用它构建什么。

不要错过下一篇文章!

注册 Prisma 时事通讯

© . All rights reserved.