Database migrations. CLI and Golang library.
Go to file
Taylor Wrobel 1d8a881941 Add CockroachDB Support
Adds support for CockroachDB.  Cockroach uses the postges wire
protocol and has a large amount of common SQL functionality shared
with Postgres, so much of the postgres code was able to be copied
and modified.

Since the protocol is used in determining the driver, and the
Postgres protocol is also used by Cockroach, new connect string
prefixes were added: cockroach:// cockroachdb:// and
crdb-postgres://.  These fake protocol strings are replaced in
the connect function with the correct `postgres://` protocol.

TODO: Tests needed (Cockroach has a docker image, so this shouldn't
be too hard)
2017-07-07 23:12:07 -07:00
cli Add CockroachDB Support 2017-07-07 23:12:07 -07:00
database Add CockroachDB Support 2017-07-07 23:12:07 -07:00
source Update README.md 2017-07-03 15:45:57 +02:00
testing add cassandra driver and function to retrieve networkSettings to get port bound to 9042 2017-05-31 10:05:56 +02:00
.gitignore add .godoc.pid to gitignore 2017-02-09 13:47:28 -08:00
.travis.yml Update docker dependency version to fix Tavis builds 2017-06-24 10:37:08 -07:00
CONTRIBUTING.md Update documentation 2017-02-11 11:13:27 -08:00
FAQ.md Update FAQ.md 2017-02-23 14:27:04 -08:00
LICENSE initial version 3.0.0 preview 2017-02-07 22:01:29 -08:00
MIGRATIONS.md Update documentation 2017-02-11 11:13:27 -08:00
Makefile Add CockroachDB Support 2017-07-07 23:12:07 -07:00
README.md Add CockroachDB Support 2017-07-07 23:12:07 -07:00
log.go add some more comments 2017-02-09 18:23:08 -08:00
migrate.go make Force doc clear 2017-02-19 16:22:48 -08:00
migrate_test.go explain dirty version error 2017-02-19 15:51:12 -08:00
migration.go fix old ref to LogString 2017-02-09 18:26:58 -08:00
migration_test.go rename Migration.LongString to LogString 2017-02-09 18:06:38 -08:00
util.go drop custom query params 2017-02-17 16:59:47 -08:00
util_test.go drop custom query params 2017-02-17 16:59:47 -08:00

README.md

Build Status GoDoc Coverage Status packagecloud.io

migrate

Database migrations written in Go. Use as CLI or import as library.

  • Migrate reads migrations from sources and applies them in correct order to a database.
  • Drivers are "dumb", migrate glues everything together and makes sure the logic is bulletproof.
    (Keeps the drivers lightweight, too.)
  • Database drivers don't assume things or try to correct user input. When in doubt, fail.

Looking for v1?

Databases

Database drivers run migrations. Add a new database?

Migration Sources

Source drivers read migrations from local or remote sources. Add a new source?

CLI usage

  • Simple wrapper around this library.
  • Handles ctrl+c (SIGINT) gracefully.
  • No config search paths, no config files, no magic ENV var injections.

CLI Documentation

(brew todo #156)

$ brew install migrate --with-postgres
$ migrate -database postgres://localhost:5432/database up 2

Use in your Go project

  • API is stable and frozen for this release (v3.x).
  • Package migrate has no external dependencies.
  • Only import the drivers you need. (check dependency_tree.txt for each driver)
  • To help prevent database corruptions, it supports graceful stops via GracefulStop chan bool.
  • Bring your own logger.
  • Uses io.Reader streams internally for low memory overhead.
  • Thread-safe and no goroutine leaks.

Go Documentation

import (
    "github.com/mattes/migrate"
    _ "github.com/mattes/migrate/database/postgres"
    _ "github.com/mattes/migrate/source/github"
)

func main() {
    m, err := migrate.New(
        "github://mattes:personal-access-token@mattes/migrate_test",
        "postgres://localhost:5432/database?sslmode=enable")
    m.Steps(2)
}

Want to use an existing database client?

import (
    "database/sql"
    _ "github.com/lib/pq"
    "github.com/mattes/migrate"
    "github.com/mattes/migrate/database/postgres"
    _ "github.com/mattes/migrate/source/file"
)

func main() {
    db, err := sql.Open("postgres", "postgres://localhost:5432/database?sslmode=enable")
    driver, err := postgres.WithInstance(db, &postgres.Config{})
    m, err := migrate.NewWithDatabaseInstance(
        "file:///migrations",
        "postgres", driver)
    m.Steps(2)
}

Migration files

Each migration has an up and down migration. Why?

1481574547_create_users_table.up.sql
1481574547_create_users_table.down.sql

Best practices: How to write migrations.

Development and Contributing

Yes, please! Makefile is your friend, read the development guide.

Also have a look at the FAQ.


Looking for alternatives? https://awesome-go.com/#database.