介绍
模式迁移工作流
Ent 支持两种不同的工作流来管理模式变更:
- 自动化迁移 —— 一种声明式模式迁移风格,其迁移过程完全在运行时发生。
在这个工作流中,Ent 计算连接的数据库与模式需满足
ent.Schema定义的数据库的不同,然后将变更应用到数据库。 - 版本化迁移 —— 模式迁移提前被编写为 SQL 文件,然后通过 Atlas 或 golang-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.
}
这段代码连接到数据库并运行自动化迁移来创建所有模式资源。
下一步我们看一下如何为此项目设置版本化迁移。