
Bibliothèque Go et CLI pour la gestion des migrations de schéma de base de données, avec prise en charge de PostgreSQL, MySQL, SQLite et Cassandra, incluant des flux de travail de migration ascendants/descendants.
Un outil d'aide à la migration écrit en Go. Utilisez-le dans votre code Golang existant ou exécutez des commandes via la CLI.
GoCode import github.com/mattes/migrate/migrate
CLI go get -u github.com/mattes/migrate
Fonctionnalités
^C.paquet migrate.Besoin d'un autre pilote ? Implémentez simplement l'interface Driver et ouvrez une PR.
# installation
go get github.com/mattes/migrate
# créer un nouveau fichier de migration dans le chemin
migrate -url driver://url -path ./migrations create migration_file_xyz
# appliquer toutes les migrations disponibles
migrate -url driver://url -path ./migrations up
# annuler toutes les migrations
migrate -url driver://url -path ./migrations down
# annuler la migration la plus récemment appliquée, puis la réexécuter.
migrate -url driver://url -path ./migrations redo
# exécuter la commande down puis up
migrate -url driver://url -path ./migrations reset
# afficher la version de migration actuelle
migrate -url driver://url -path ./migrations version
# appliquer les n migrations suivantes
migrate -url driver://url -path ./migrations migrate +1
migrate -url driver://url -path ./migrations migrate +2
migrate -url driver://url -path ./migrations migrate +n
# annuler les n migrations précédentes
migrate -url driver://url -path ./migrations migrate -1
migrate -url driver://url -path ./migrations migrate -2
migrate -url driver://url -path ./migrations migrate -n
# aller à une migration spécifique
migrate -url driver://url -path ./migrations goto 1
migrate -url driver://url -path ./migrations goto 10
migrate -url driver://url -path ./migrations goto v
Voir GoDoc ici : http://godoc.org/github.com/mattes/migrate/migrate
import "github.com/mattes/migrate/migrate"
// Importer tous les pilotes requis afin qu'ils soient enregistrés et disponibles
import _ "github.com/mattes/migrate/driver/mysql"
// utiliser les versions synchrones des fonctions de migration ...
allErrors, ok := migrate.UpSync("driver://url", "./path")
if !ok {
fmt.Println("Oh non ...")
// faire quelque chose avec la tranche allErrors
}
// utiliser la version asynchrone des fonctions de migration ...
pipe := migrate.NewPipe()
go migrate.Up(pipe, "driver://url", "./path")
// pipe est essentiellement un canal
// écrire votre propre écouteur de canal. voir writePipe() dans main.go comme exemple.
Le format des fichiers de migration ressemble à ceci :
001_initial_plan_to_do_sth.up.sql # instructions de migration up
001_initial_plan_to_do_sth.down.sql # instructions de migration down
002_xxx.up.sql
002_xxx.down.sql
...
Pourquoi deux fichiers ? De cette façon, vous pouvez toujours faire quelque chose comme
psql -f ./db/migrations/001_initial_plan_to_do_sth.up.sql et il n'y a pas
besoin d'un langage de balisage personnalisé pour diviser les migrations up et down. Veuillez noter
que l'extension du nom de fichier dépend du pilote.