
Biblioteca Go y CLI para gestionar migraciones de esquemas de bases de datos con soporte para PostgreSQL, MySQL, SQLite y Cassandra, incluyendo flujos de trabajo de migración ascendente/descendente.
Un asistente de migraciones escrito en Go. Úsalo en tu código Golang existente o ejecuta comandos mediante la CLI.
GoCode import github.com/mattes/migrate/migrate
CLI go get -u github.com/mattes/migrate
Características
^C.paquete migrate.¿Necesitas otro driver? Simplemente implementa la interfaz Driver y abre un PR.
# instalar
go get github.com/mattes/migrate
# crear un nuevo archivo de migración en la ruta
migrate -url driver://url -path ./migrations create migration_file_xyz
# aplicar todas las migraciones disponibles
migrate -url driver://url -path ./migrations up
# revertir todas las migraciones
migrate -url driver://url -path ./migrations down
# revertir la migración aplicada más recientemente y luego ejecutarla de nuevo.
migrate -url driver://url -path ./migrations redo
# ejecutar el comando down y luego up
migrate -url driver://url -path ./migrations reset
# mostrar la versión actual de la migración
migrate -url driver://url -path ./migrations version
# aplicar las siguientes n migraciones
migrate -url driver://url -path ./migrations migrate +1
migrate -url driver://url -path ./migrations migrate +2
migrate -url driver://url -path ./migrations migrate +n
# revertir las n migraciones anteriores
migrate -url driver://url -path ./migrations migrate -1
migrate -url driver://url -path ./migrations migrate -2
migrate -url driver://url -path ./migrations migrate -n
# ir a una migración específica
migrate -url driver://url -path ./migrations goto 1
migrate -url driver://url -path ./migrations goto 10
migrate -url driver://url -path ./migrations goto v
Consulta GoDoc aquí: http://godoc.org/github.com/mattes/migrate/migrate
import "github.com/mattes/migrate/migrate"
// Importa cualquier driver requerido para que se registren y estén disponibles
import _ "github.com/mattes/migrate/driver/mysql"
// usa las versiones síncronas de las funciones de migración ...
allErrors, ok := migrate.UpSync("driver://url", "./path")
if !ok {
fmt.Println("Oh no ...")
// haz algo con el slice allErrors
}
// usa la versión asíncrona de las funciones de migración ...
pipe := migrate.NewPipe()
go migrate.Up(pipe, "driver://url", "./path")
// pipe es básicamente un canal
// escribe tu propio listener de canal. consulta writePipe() en main.go como ejemplo.
El formato de los archivos de migración es el siguiente:
001_initial_plan_to_do_sth.up.sql # instrucciones de migración up
001_initial_plan_to_do_sth.down.sql # instrucciones de migración down
002_xxx.up.sql
002_xxx.down.sql
...
¿Por qué dos archivos? De esta manera aún podrías hacer algo como
psql -f ./db/migrations/001_initial_plan_to_do_sth.up.sql y no hay
necesidad de ningún lenguaje de marcado personalizado para dividir las migraciones up y down. Ten en cuenta
que la extensión del archivo depende del driver.