
Biblioteca Go e CLI para gerenciar migrações de esquema de banco de dados com suporte para PostgreSQL, MySQL, SQLite e Cassandra, incluindo fluxos de trabalho de migração up/down.
Um auxiliar de migração escrito em Go. Use-o no seu código Golang existente ou execute comandos via CLI.
GoCode import github.com/mattes/migrate/migrate
CLI go get -u github.com/mattes/migrate
Recursos
^C.pacote migrate.Precisa de outro driver? Basta implementar a interface Driver e abrir um PR.
# instalar
go get github.com/mattes/migrate
# criar novo arquivo de migração no caminho
migrate -url driver://url -path ./migrations create migration_file_xyz
# aplicar todas as migrações disponíveis
migrate -url driver://url -path ./migrations up
# reverter todas as migrações
migrate -url driver://url -path ./migrations down
# reverter a migração aplicada mais recentemente e executá-la novamente.
migrate -url driver://url -path ./migrations redo
# executar o comando down e depois up
migrate -url driver://url -path ./migrations reset
# mostrar a versão atual da migração
migrate -url driver://url -path ./migrations version
# aplicar as próximas n migrações
migrate -url driver://url -path ./migrations migrate +1
migrate -url driver://url -path ./migrations migrate +2
migrate -url driver://url -path ./migrations migrate +n
# reverter as n migrações 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 para uma migração 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
Veja o GoDoc aqui: http://godoc.org/github.com/mattes/migrate/migrate
import "github.com/mattes/migrate/migrate"
// Importe quaisquer drivers necessários para que sejam registrados e fiquem disponíveis
import _ "github.com/mattes/migrate/driver/mysql"
// use versões síncronas das funções de migração ...
allErrors, ok := migrate.UpSync("driver://url", "./path")
if !ok {
fmt.Println("Oh não ...")
// faça algo com o slice allErrors
}
// use a versão assíncrona das funções de migração ...
pipe := migrate.NewPipe()
go migrate.Up(pipe, "driver://url", "./path")
// pipe é basicamente apenas um canal
// escreva seu próprio listener de canal. veja writePipe() em main.go como exemplo.
O formato dos arquivos de migração é assim:
001_initial_plan_to_do_sth.up.sql # instruções de migração up
001_initial_plan_to_do_sth.down.sql # instruções de migração down
002_xxx.up.sql
002_xxx.down.sql
...
Por que dois arquivos? Dessa forma você ainda pode fazer algo como
psql -f ./db/migrations/001_initial_plan_to_do_sth.up.sql e não há
necessidade de qualquer linguagem de marcação personalizada para dividir migrações up e down. Observe
que a extensão do nome do arquivo depende do driver.