
Go-Bibliothek und CLI zur Verwaltung von Datenbankschema-Migrationen mit Unterstützung für PostgreSQL, MySQL, SQLite und Cassandra, einschließlich Up-/Down-Migrations-Workflows.
Ein Migrations-Helfer, geschrieben in Go. Verwende ihn in deinem vorhandenen Golang-Code oder führe Befehle über die CLI aus.
GoCode import github.com/mattes/migrate/migrate
CLI go get -u github.com/mattes/migrate
Funktionen
^C sauber.migrate-Paket.Du brauchst einen anderen Treiber? Implementiere einfach die Driver-Schnittstelle und eröffne einen PR.
# installieren
go get github.com/mattes/migrate
# neue Migrationsdatei im Pfad erstellen
migrate -url driver://url -path ./migrations create migration_file_xyz
# alle verfügbaren Migrationen anwenden
migrate -url driver://url -path ./migrations up
# alle Migrationen zurückrollen
migrate -url driver://url -path ./migrations down
# die zuletzt angewendete Migration zurückrollen und dann erneut ausführen.
migrate -url driver://url -path ./migrations redo
# den down- und dann den up-Befehl ausführen
migrate -url driver://url -path ./migrations reset
# die aktuelle Migrationsversion anzeigen
migrate -url driver://url -path ./migrations version
# die nächsten n Migrationen anwenden
migrate -url driver://url -path ./migrations migrate +1
migrate -url driver://url -path ./migrations migrate +2
migrate -url driver://url -path ./migrations migrate +n
# die vorherigen n Migrationen zurückrollen
migrate -url driver://url -path ./migrations migrate -1
migrate -url driver://url -path ./migrations migrate -2
migrate -url driver://url -path ./migrations migrate -n
# zu einer bestimmten Migration wechseln
migrate -url driver://url -path ./migrations goto 1
migrate -url driver://url -path ./migrations goto 10
migrate -url driver://url -path ./migrations goto v
Siehe GoDoc hier: http://godoc.org/github.com/mattes/migrate/migrate
import "github.com/mattes/migrate/migrate"
// Importiere alle benötigten Treiber, damit sie registriert und verfügbar sind
import _ "github.com/mattes/migrate/driver/mysql"
// verwende synchrone Versionen der Migrationsfunktionen ...
allErrors, ok := migrate.UpSync("driver://url", "./path")
if !ok {
fmt.Println("Oh nein ...")
// mache etwas mit dem allErrors-Slice
}
// verwende die asynchrone Version der Migrationsfunktionen ...
pipe := migrate.NewPipe()
go migrate.Up(pipe, "driver://url", "./path")
// pipe ist im Grunde nur ein Kanal
// schreibe deinen eigenen Kanal-Listener. Siehe writePipe() in main.go als Beispiel.
Das Format der Migrationsdateien sieht so aus:
001_initial_plan_to_do_sth.up.sql # up-Migrationsanweisungen
001_initial_plan_to_do_sth.down.sql # down-Migrationsanweisungen
002_xxx.up.sql
002_xxx.down.sql
...
Warum zwei Dateien? Auf diese Weise kannst du weiterhin so etwas wie
psql -f ./db/migrations/001_initial_plan_to_do_sth.up.sql ausführen, und es ist keine
benutzerdefinierte Auszeichnungssprache nötig, um up- und down-Migrationen zu trennen. Bitte beachte,
dass die Dateinamenerweiterung vom Treiber abhängt.