Database migrations. CLI and Golang library.
Go to file
mattes 3e27de861d Update Readme 2014-08-13 14:05:48 +02:00
driver improve comments and add license 2014-08-13 03:37:48 +02:00
file update comments 2014-08-13 03:49:49 +02:00
migrate removed false comment 2014-08-13 04:35:05 +02:00
pipe improve comments and add license 2014-08-13 03:37:48 +02:00
.gitignore initial 2014-08-11 03:42:57 +02:00
.travis.yml update travis to run tests not in parallel 2014-08-11 03:57:29 +02:00
LICENSE improve comments and add license 2014-08-13 03:37:48 +02:00
README.md Update Readme 2014-08-13 14:05:48 +02:00
main.go update error format 2014-08-13 04:22:59 +02:00

README.md

migrate

Build Status GoDoc

migrate is a migration helper written in Go. Use it in your existing Golang code or run migration commands via the CLI.

Go Code  import github.com/mattes/migrate/migrate
CLI      go get github.com/mattes/migrate

Available Drivers

Need another driver? Just implement the Driver interface and open a PR.

Usage from Terminal

# 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

Usage in Go

See GoDoc here: http://godoc.org/github.com/mattes/migrate/migrate

import "github.com/mattes/migrate/migrate"

// 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

The format of migration files looks like this:

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
...

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.

Alternatives