自动迁移规划
自动迁移规划
自动化迁移方便的一点是开发者无需编写 SQL 语句来创建或修改数据库模式。 为获取这一好处,我们向项目中添加一个脚本来为我们在模式变更时自动规划迁移文件。
Ent 使用 Atlas 来做到这一点,它是一个管理数据库模式的开源工具,由 Ent 背后相同的团队创建。
如果你正在跟进我们的示例代码仓库,你会了解到我们目前正在使用 SQLite 数据库。 为演示更加真实的场景,我们现在切换到 MySQL 数据库。 在 PR #3 查看这一变化。
使用 Atlas CLI 规划迁移
在本部分我们会演示如何使用 Atlas CLI 来自动规划模式迁移。 在过去用户需要创建自定义 Go 语言程序来实现它(如 这里 所述)。 在 Atlas 最近的版本中这不再需要了:Atlas 可以原生从 Ent 模式加载期望的数据库模式。
要安装Atlas的最新版本,只需在终端中运行以下任一命令,或访问Atlas 官方网站:
- macOS + Linux
- Homebrew
- Docker
- Windows
curl -sSf https://atlasgo.sh | sh
brew install ariga/tap/atlas
docker pull arigaio/atlas
docker run --rm arigaio/atlas --help
如果容器需要访问主机网络或本地目录,请使用 --net=host 标志挂载所需目录:
docker run --rm --net=host \
-v $(pwd)/migrations:/migrations \
arigaio/atlas migrate apply
--url "mysql://root:pass@:3306/test"
下载 最新版本 并将 atlas 二进制执行文件所在目录加入到系统路径中。
然后运行以下命令来为 Ent 模式自动生成迁移文件:
- MySQL
- MariaDB
- PostgreSQL
- SQLite
atlas migrate diff migration_name \
--dir "file://ent/migrate/migrations" \
--to "ent://ent/schema" \
--dev-url "docker://mysql/8/ent"
atlas migrate diff migration_name \
--dir "file://ent/migrate/migrations" \
--to "ent://ent/schema" \
--dev-url "docker://mariadb/latest/test"
atlas migrate diff migration_name \
--dir "file://ent/migrate/migrations" \
--to "ent://ent/schema" \
--dev-url "docker://postgres/15/test?search_path=public"
atlas migrate diff migration_name \
--dir "file://ent/migrate/migrations" \
--to "ent://ent/schema" \
--dev-url "sqlite://file?mode=memory&_fk=1"
开发数据库 的作用
Atlas 通过执行存储在迁移目录中的 SQL 文件加载 当前状态 到提供的 开发数据库。
然后它会比较 ent/schema 包中定义的 期望状态 并编写迁移规划,此规划将当前状态移动到期望状态。
下一步让我们看一下如何升级现有的生产环境数据库使其由版本化迁移来管理。