
Библиотека Go и CLI для управления миграциями схемы базы данных с поддержкой PostgreSQL, MySQL, SQLite и Cassandra, включая рабочие процессы миграций up/down.
Хелпер для миграций, написанный на Go. Используйте его в своём существующем коде на Golang или запускайте команды через CLI.
GoCode import github.com/mattes/migrate/migrate
CLI go get -u github.com/mattes/migrate
Возможности
^C.пакета migrate.Нужен другой драйвер? Просто реализуйте интерфейс Driver и откройте PR.
# установка
go get github.com/mattes/migrate
# создать новый файл миграции по указанному пути
migrate -url driver://url -path ./migrations create migration_file_xyz
# применить все доступные миграции
migrate -url driver://url -path ./migrations up
# откатить все миграции
migrate -url driver://url -path ./migrations down
# откатить последнюю применённую миграцию, затем запустить её снова.
migrate -url driver://url -path ./migrations redo
# выполнить команду down, а затем up
migrate -url driver://url -path ./migrations reset
# показать текущую версию миграции
migrate -url driver://url -path ./migrations version
# применить следующие n миграций
migrate -url driver://url -path ./migrations migrate +1
migrate -url driver://url -path ./migrations migrate +2
migrate -url driver://url -path ./migrations migrate +n
# откатить предыдущие n миграций
migrate -url driver://url -path ./migrations migrate -1
migrate -url driver://url -path ./migrations migrate -2
migrate -url driver://url -path ./migrations migrate -n
# перейти к конкретной миграции
migrate -url driver://url -path ./migrations goto 1
migrate -url driver://url -path ./migrations goto 10
migrate -url driver://url -path ./migrations goto v
Смотрите GoDoc здесь: http://godoc.org/github.com/mattes/migrate/migrate
import "github.com/mattes/migrate/migrate"
// Импортируйте любые необходимые драйверы, чтобы они были зарегистрированы и доступны
import _ "github.com/mattes/migrate/driver/mysql"
// используйте синхронные версии функций миграции ...
allErrors, ok := migrate.UpSync("driver://url", "./path")
if !ok {
fmt.Println("О нет ...")
// сделайте что-нибудь со срезом allErrors
}
// используйте асинхронную версию функций миграции ...
pipe := migrate.NewPipe()
go migrate.Up(pipe, "driver://url", "./path")
// pipe — это, по сути, просто канал
// напишите свой собственный слушатель канала. см. writePipe() в main.go в качестве примера.
Формат файлов миграций выглядит так:
001_initial_plan_to_do_sth.up.sql # инструкции для up-миграции
001_initial_plan_to_do_sth.down.sql # инструкции для down-миграции
002_xxx.up.sql
002_xxx.down.sql
...
Почему два файла? Так вы всё ещё можете сделать что-то вроде
psql -f ./db/migrations/001_initial_plan_to_do_sth.up.sql, и нет
необходимости в каком-либо пользовательском языке разметки для разделения up- и down-миграций. Обратите внимание,
что расширение имени файла зависит от драйвера.