
Libreria Go e CLI per la gestione delle migrazioni dello schema del database, con supporto per PostgreSQL, MySQL, SQLite e Cassandra, inclusi i flussi di lavoro di migrazione up/down.
Un helper per le migrazioni scritto in Go. Usalo nel tuo codice Golang esistente oppure esegui i comandi tramite la CLI.
GoCode import github.com/mattes/migrate/migrate
CLI go get -u github.com/mattes/migrate
Caratteristiche
^C.pacchetto migrate.Ti serve un altro driver? Implementa semplicemente l'interfaccia Driver e apri una PR.
# installazione
go get github.com/mattes/migrate
# crea un nuovo file di migrazione nel percorso
migrate -url driver://url -path ./migrations create migration_file_xyz
# applica tutte le migrazioni disponibili
migrate -url driver://url -path ./migrations up
# annulla tutte le migrazioni
migrate -url driver://url -path ./migrations down
# annulla la migrazione applicata più di recente, poi eseguila di nuovo.
migrate -url driver://url -path ./migrations redo
# esegui il comando down e poi up
migrate -url driver://url -path ./migrations reset
# mostra la versione corrente della migrazione
migrate -url driver://url -path ./migrations version
# applica le prossime n migrazioni
migrate -url driver://url -path ./migrations migrate +1
migrate -url driver://url -path ./migrations migrate +2
migrate -url driver://url -path ./migrations migrate +n
# annulla le precedenti n migrazioni
migrate -url driver://url -path ./migrations migrate -1
migrate -url driver://url -path ./migrations migrate -2
migrate -url driver://url -path ./migrations migrate -n
# vai a una migrazione specifica
migrate -url driver://url -path ./migrations goto 1
migrate -url driver://url -path ./migrations goto 10
migrate -url driver://url -path ./migrations goto v
Vedi GoDoc qui: http://godoc.org/github.com/mattes/migrate/migrate
import "github.com/mattes/migrate/migrate"
// Importa tutti i driver necessari affinché vengano registrati e resi disponibili
import _ "github.com/mattes/migrate/driver/mysql"
// usa le versioni sincrone delle funzioni di migrazione ...
allErrors, ok := migrate.UpSync("driver://url", "./path")
if !ok {
fmt.Println("Oh no ...")
// fai qualcosa con lo slice allErrors
}
// usa la versione asincrona delle funzioni di migrazione ...
pipe := migrate.NewPipe()
go migrate.Up(pipe, "driver://url", "./path")
// pipe è fondamentalmente solo un canale
// scrivi il tuo listener per il canale. vedi writePipe() in main.go come esempio.
Il formato dei file di migrazione è il seguente:
001_initial_plan_to_do_sth.up.sql # istruzioni di migrazione up
001_initial_plan_to_do_sth.down.sql # istruzioni di migrazione down
002_xxx.up.sql
002_xxx.down.sql
...
Perché due file? In questo modo puoi ancora fare cose come
psql -f ./db/migrations/001_initial_plan_to_do_sth.up.sql e non c'è
bisogno di alcun linguaggio di markup personalizzato per dividere le migrazioni up e down. Nota
che l'estensione del file dipende dal driver.