mirror of https://github.com/pressly/goose.git
98 lines
1.9 KiB
Go
98 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/pressly/goose"
|
|
|
|
_ "github.com/pressly/goose/example/migrations-go"
|
|
|
|
_ "github.com/go-sql-driver/mysql"
|
|
_ "github.com/lib/pq"
|
|
_ "github.com/mattn/go-sqlite3"
|
|
_ "github.com/ziutek/mymysql/godrv"
|
|
)
|
|
|
|
var (
|
|
flags = flag.NewFlagSet("goose", flag.ExitOnError)
|
|
dir = flags.String("dir", ".", "directory with migration files")
|
|
)
|
|
|
|
func main() {
|
|
flags.Usage = usage
|
|
flags.Parse(os.Args[1:])
|
|
|
|
args := flags.Args()
|
|
if len(args) != 3 {
|
|
flags.Usage()
|
|
return
|
|
}
|
|
|
|
if args[0] == "-h" || args[0] == "--help" {
|
|
flags.Usage()
|
|
return
|
|
}
|
|
|
|
driver, dbstring, command := args[0], args[1], args[2]
|
|
|
|
switch driver {
|
|
case "postgres", "mysql", "sqlite3", "redshift":
|
|
if err := goose.SetDialect(driver); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
default:
|
|
log.Fatalf("%q driver not supported\n", driver)
|
|
}
|
|
|
|
switch dbstring {
|
|
case "":
|
|
log.Fatalf("-dbstring=%q not supported\n", dbstring)
|
|
default:
|
|
}
|
|
|
|
if driver == "redshift" {
|
|
driver = "postgres"
|
|
}
|
|
|
|
db, err := sql.Open(driver, dbstring)
|
|
if err != nil {
|
|
log.Fatalf("-dbstring=%q: %v\n", dbstring, err)
|
|
}
|
|
|
|
if err := goose.Run(command, db, *dir); err != nil {
|
|
log.Fatalf("goose run: %v", err)
|
|
}
|
|
}
|
|
|
|
func usage() {
|
|
fmt.Print(usagePrefix)
|
|
flags.PrintDefaults()
|
|
fmt.Print(usageCommands)
|
|
}
|
|
|
|
var (
|
|
usagePrefix = `Usage: goose [OPTIONS] DRIVER DBSTRING COMMAND
|
|
|
|
Examples:
|
|
goose postgres "user=postgres dbname=postgres sslmode=disable" up
|
|
goose mysql "user:password@/dbname" down
|
|
goose sqlite3 ./foo.db status
|
|
goose redshift "postgres://user:password@qwerty.us-east-1.redshift.amazonaws.com:5439/db" create init sql
|
|
|
|
Options:
|
|
`
|
|
|
|
usageCommands = `
|
|
Commands:
|
|
up Migrate the DB to the most recent version available
|
|
down Roll back the version by 1
|
|
redo Re-run the latest migration
|
|
status Dump the migration status for the current DB
|
|
dbversion Print the current version of the database
|
|
`
|
|
)
|