commit | dfe3ec0fcec9cbbe7a252409b1db7e0b8b7ab951 | [log] [tgz] |
---|---|---|
author | Matthias Kadenbach <matthias.kadenbach@gmail.com> | Sun Jul 09 18:00:29 2017 |
committer | GitHub <noreply@github.com> | Sun Jul 09 18:00:29 2017 |
tree | 6a1844ef1b18e3c4ab6a830efba35618e1fff17a | |
parent | afc973c4e5a6b746217c2d3950fcd110ed1ba349 [diff] | |
parent | 01b25ee18b4c4b1be71803be54933797de3abe2e [diff] |
Merge pull request #198 from rmulley/travis-go-1.8 TravisCI Updates
A migration helper written in Go. Use it in your existing Golang code or run commands via the CLI.
GoCode import gopkg.in/mattes/migrate.v1/migrate CLI go get -u gopkg.in/mattes/migrate.v1
Features
^C
.migrate package
.Need another driver? Just implement the Driver interface and open a PR.
# install go get gopkg.in/mattes/migrate.v1 # 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
See GoDoc here: http://godoc.org/gopkg.in/mattes/migrate.v1/migrate
import "gopkg.in/mattes/migrate.v1/migrate" // Import any required drivers so that they are registered and available import _ "gopkg.in/mattes/migrate.v1/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.
The format of migration files looks like this:
1481574547_initial_plan_to_do_sth.up.sql # up migration instructions 1481574547_initial_plan_to_do_sth.down.sql # down migration instructions 1482438365_xxx.up.sql 1482438365_xxx.down.sql ...
Why two files? This way you could still do sth like psql -f ./db/migrations/1481574547_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.