跳到主要内容

介绍

模式迁移工作流

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

  • 自动化迁移 —— 一种声明式模式迁移风格,其迁移过程完全在运行时发生。 在这个工作流中,Ent 计算连接的数据库与模式需满足 ent.Schema 定义的数据库的不同,然后将变更应用到数据库。
  • 版本化迁移 —— 模式迁移提前被编写为 SQL 文件,然后通过 Atlasgolang-migrate 等特定工具应用到数据库。

许多用户开始会使用自动化迁移工作流,因为它是最简单的,但是随着项目的增长,他们发现他们需要对迁移过程更多的控制, 然后转为使用版本化迁移工作流。

本教程讨论将已有项目从自动化迁移升级为版本化迁移。

支持的代码仓库

本教程每一步演示都可以在 GitHub 的 rotemtam/ent-versioned-migrations-demo 代码仓库找到。每一部分都会提供代码仓库相关提交的链接。

我们将要升级的最初的 Ent 项目可以在 这里 找到。

自动化迁移

在本教程中我们假设你已经有一个 Ent 项目在使用自动化迁移了。 许多相似的项目在 main.go 文件中都有一段相似的代码:

package main

func main() {
// Connect to the database (MySQL for example).
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()
// Run migration.
if err := client.Schema.Create(ctx); err != nil {
log.Fatalf("failed creating schema resources: %v", err)
}
// ... Continue with server start.
}

这段代码连接到数据库并运行自动化迁移来创建所有模式资源。

下一步我们看一下如何为此项目设置版本化迁移。