一个用 Go 编写的迁移辅助工具。你可以在现有的 Golang 代码中使用它, 或者通过 CLI 运行命令。
GoCode import github.com/mattes/migrate/migrate
CLI go get -u github.com/mattes/migrate
特性
^C 时优雅地退出正在运行的迁移。migrate 包 之上。需要其他驱动?只需实现 Driver 接口 并提交一个 PR。
# 安装
go get github.com/mattes/migrate
# 在路径中创建新的迁移文件
migrate -url driver://url -path ./migrations create migration_file_xyz
# 应用所有可用的迁移
migrate -url driver://url -path ./migrations up
# 回滚所有迁移
migrate -url driver://url -path ./migrations down
# 回滚最近应用的迁移,然后再次运行它。
migrate -url driver://url -path ./migrations redo
# 运行 down 然后运行 up 命令
migrate -url driver://url -path ./migrations reset
# 显示当前的迁移版本
migrate -url driver://url -path ./migrations version
# 应用接下来的 n 个迁移
migrate -url driver://url -path ./migrations migrate +1
migrate -url driver://url -path ./migrations migrate +2
migrate -url driver://url -path ./migrations migrate +n
# 回滚之前的 n 个迁移
migrate -url driver://url -path ./migrations migrate -1
migrate -url driver://url -path ./migrations migrate -2
migrate -url driver://url -path ./migrations migrate -n
# 跳转到特定迁移
migrate -url driver://url -path ./migrations goto 1
migrate -url driver://url -path ./migrations goto 10
migrate -url driver://url -path ./migrations goto v
参见 GoDoc:http://godoc.org/github.com/mattes/migrate/migrate
import "github.com/mattes/migrate/migrate"
// 导入任何所需的驱动,以便它们被注册并可用
import _ "github.com/mattes/migrate/driver/mysql"
// 使用同步版本的迁移函数 ...
allErrors, ok := migrate.UpSync("driver://url", "./path")
if !ok {
fmt.Println("哦不 ...")
// 对 allErrors 切片做点什么
}
// 使用异步版本的迁移函数 ...
pipe := migrate.NewPipe()
go migrate.Up(pipe, "driver://url", "./path")
// pipe 基本上只是一个通道
// 编写你自己的通道监听器。参见 main.go 中的 writePipe() 作为示例。
迁移文件的格式如下:
001_initial_plan_to_do_sth.up.sql # up 迁移指令
001_initial_plan_to_do_sth.down.sql # down 迁移指令
002_xxx.up.sql
002_xxx.down.sql
...
为什么是两个文件?这样你仍然可以执行类似
psql -f ./db/migrations/001_initial_plan_to_do_sth.up.sql 的操作,并且
不需要任何自定义标记语言来区分 up 和 down 迁移。请注意
文件扩展名取决于驱动。