# migrate **Repository Path**: mirrors_gitGNU/migrate ## Basic Information - **Project Name**: migrate - **Description**: Database migrations. CLI and Golang library. - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-09-24 - **Last Updated**: 2025-12-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # migrate A migration helper written in Go. Use it in your existing Golang code or run commands via the CLI. ``` GoCode import github.com/bradley219/migrate/migrate CLI go get -u github.com/bradley219/migrate ``` __Features__ * Super easy to implement [Driver interface](http://godoc.org/github.com/bradley219/migrate/driver#Driver). * Gracefully quit running migrations on ``^C``. * No magic search paths routines, no hard-coded config files. * CLI is build on top of the ``migrate package``. ## Available Drivers * [PostgreSQL](driver/postgres) * [Cassandra](driver/cassandra) * [SQLite](driver/sqlite3) * [MySQL](driver/mysql) ([experimental](https://github.com/bradley219/migrate/issues/1#issuecomment-58728186)) * [Neo4j](driver/neo4j) * [Ql](driver/ql) * [MongoDB](driver/mongodb) * [CrateDB](driver/crate) Need another driver? Just implement the [Driver interface](http://godoc.org/github.com/bradley219/migrate/driver#Driver) and open a PR. ## Usage from Terminal ```bash # install go get github.com/bradley219/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 See GoDoc here: http://godoc.org/github.com/bradley219/migrate/migrate ```go import "github.com/bradley219/migrate/migrate" // Import any required drivers so that they are registered and available import _ "github.com/bradley219/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 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. ## Alternatives * https://bitbucket.org/liamstask/goose * https://github.com/tanel/dbmigrate * https://github.com/BurntSushi/migration * https://github.com/DavidHuie/gomigrate * https://github.com/rubenv/sql-migrate