跳到主要内容

介绍

模式迁移流程

Ent 支持两种不同的工作流来管理模式变更:

  • 自动迁移 - 一种声明式的模式迁移方式,完全在运行时执行。 使用此流程时,Ent 会计算连接的数据库与满足 ent.Schema 定义所需的数据库模式之间的差异,然后将更改应用到数据库。
  • 版本化迁移 - 一种工作流,其中模式迁移会提前编写为 SQL 文件,然后通过专门的工具(如 Atlasgolang-migrate)应用到数据库。

许多用户从自动迁移流程开始,因为它最容易上手,但随着项目规模增长,可能会发现需要对迁移过程有更多控制, 于是转向版本化迁移流程。

本教程将引导您完成将现有项目从自动迁移升级到版本化迁移的过程。

示例代码库

本教程展示的所有步骤都可以在 GitHub 上的 rotemtam/ent-versioned-migrations-demo 代码库中找到。每个部分我们都会链接到代码库中的相关提交。

我们将要升级的初始 Ent 项目位于 此处

自动迁移

在本教程中,我们假设您有一个现有的 Ent 项目,并且正在使用自动迁移。 许多简单的项目在其 main.go 文件中都有类似这样的代码块:

package main

func main() {
// 连接到数据库(以 MySQL 为例)。
client, err := ent.Open("mysql", "root:pass@tcp(localhost:3306)/test")
if err != nil {
log.Fatalf("failed connecting to mysql: %v", err)
}
defer client.Close()
ctx := context.Background()
// 运行迁移。
if err := client.Schema.Create(ctx); err != nil {
log.Fatalf("failed creating schema resources: %v", err)
}
// ... 继续启动服务器。
}

这段代码连接到数据库,然后运行自动迁移工具来创建所有模式资源。

接下来,让我们看看如何为版本化迁移设置我们的项目。