Skip to content
/ mg Public
forked from nissy/mg

mg is database migrations command.

License

Notifications You must be signed in to change notification settings

zuudev/mg

 
 

Repository files navigation

mg

mg is database migrations command.

support databases

  • PostgreSQL
  • MySQL

install

$ go get -u github.com/nissy/mg/cmd/mg

Mac OS X

$ brew tap nissy/mg
$ brew install nissy/mg/mg

config

  • default config read is mg.toml in current directory
  • environment variable support
[postgres-sample]
  driver = "postgres"
  dsn = "postgres://user:[email protected]:5432/dbname?sslmode=disable"
  source_dir = [
    "./testdata/postgres/migrates",
    "./testdata/postgres/seeds"
  ]

[mysql-sample]
  driver = "mysql"
  dsn = "user:password@tcp(127.0.0.1:3306)/dbname"
  source_dir = [
    "./testdata/mysql/migrates",
    "./testdata/mysql/seeds"
  ]

[environment-variable-sample]
  driver = "postgres"
  dsn = "postgres://user:${PASSWORD}@${HOSTNAME}:5432/dbname?sslmode=disable"
  source_dir = [
    "./testdata/postgres/migrates",
    "./testdata/postgres/seeds"
  ]

options

[option-sample] # section name
  driver = "postgres" # database driver
  dsn = "postgres://user:${PASSWORD}@${HOSTNAME}:5432/dbname?sslmode=disable" # database dsn
  source_dir = [ # database source directorys
    "./testdata/postgres/migrates",
    "./testdata/postgres/seeds"
  ]
  up_annotation = "+goose Up" # database up command annotation
  down_annotation = "+goose Down" # database down command annotation
  version_table = "migration_versions" # versions use table name
  version_start_number = 2019060819341936 # version start number
  json_format = true # output message format

source sql

-- @migrate.up
CREATE TABLE users (
  id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  name varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  created_at datetime DEFAULT NULL,
  updated_at datetime DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB;

-- @migrate.down
DROP TABLE users;

commands

mg [options] <command> [sections...]

up

apply current version or later.

$ mg up postgres-sample
OK 2019060819341935 to postgres-sample is testdata/postgres/migrates/2019060819341935_users.sql
OK 2019060819341948 to postgres-sample is testdata/postgres/seeds/2019060819341948_users.sql

down

back to previous version.

$ mg down postgres-sample
OK 2019060819341948 to postgres-sample is testdata/postgres/seeds/2019060819341948_users.sql

status

display the current applied status.

$ mg status postgres-sample
Version of postgres-sample:
    unapplied:
        2019060819341811 testdata/postgres/seeds/2019060819341811_jobs.sql
    current:
        2019060819341935
    apply:
        2019060819341948 testdata/postgres/seeds/2019060819341948_users.sql

exit with 1 if there is version that has not been applied.

Error: Section is postgres-sample There are versions that do not apply.
exit status 1

force-up

apply all versions not currently applied.

$ mg force-up postgres-sample
OK 2019060819341811 to postgres-sample is testdata/postgres/seeds/2019060819341811_jobs.sql
OK 2019060819341948 to postgres-sample is testdata/postgres/seeds/2019060819341948_users.sql

help

Usage:
    mg [options] <command> [sections...]
Options:
    -c string
        Set configuration file. (default "mg.toml")
    -n string
        Create empty source file.
    -h bool
        This help.
    -v bool
        Display the version of mg.
Commands:
    up       Apply current version or later.
    force-up Apply all versions not currently applied.
    down     Back to previous version.
    status   Display the current applied status.

About

mg is database migrations command.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 94.7%
  • Makefile 5.3%