Migrate - 数据库迁移处理助手
Need another driver? Just implement theDriver interface and open a PR.  See GoDoc here: http://godoc.org/github.com/mattes/migrate/migrate  The format of migration files looks like this: Why two files? This way you could still do sth like psql -f ./db/migrations/001_initial_plan_to_do_sth.up.sql and there is no need for any custom markup language to divide up and down migrations. Please note that the filename extension depends on the driver. GoCode   import github.com/mattes/migrate/migrate  CLI      go get -u github.com/mattes/migrate
 特性
    
可用的驱动 
    
在终端中使用 
  # install  go get github.com/mattes/migrate    # create new migration file in path  migrate -url driver://url -path ./migrations create migration_file_xyz    # apply all available migrations  migrate -url driver://url -path ./migrations up    # roll back all migrations  migrate -url driver://url -path ./migrations down    # roll back the most recently applied migration, then run it again.  migrate -url driver://url -path ./migrations redo    # run down and then up command  migrate -url driver://url -path ./migrations reset    # show the current migration version  migrate -url driver://url -path ./migrations version    # apply the next n migrations  migrate -url driver://url -path ./migrations migrate +1  migrate -url driver://url -path ./migrations migrate +2  migrate -url driver://url -path ./migrations migrate +n    # roll back the previous n migrations  migrate -url driver://url -path ./migrations migrate -1  migrate -url driver://url -path ./migrations migrate -2  migrate -url driver://url -path ./migrations migrate -n    # go to specific migration  migrate -url driver://url -path ./migrations goto 1  migrate -url driver://url -path ./migrations goto 10  migrate -url driver://url -path ./migrations goto v
 Usage in Go 
  import "github.com/mattes/migrate/migrate"    // Import any required drivers so that they are registered and available  import _ "github.com/mattes/migrate/driver/mysql"    // use synchronous versions of migration functions ...  allErrors, ok := migrate.UpSync("driver://url", "./path")  if !ok {    fmt.Println("Oh no ...")    // do sth with allErrors slice  }    // use the asynchronous version of migration functions ...  pipe := migrate.NewPipe()  go migrate.Up(pipe, "driver://url", "./path")  // pipe is basically just a channel  // write your own channel listener. see writePipe() in main.go as an example. Migration files 
  001_initial_plan_to_do_sth.up.sql     # up migration instructions  001_initial_plan_to_do_sth.down.sql   # down migration instructions  002_xxx.up.sql  002_xxx.down.sql  ...
 可选项目