
Go 라이브러리 및 CLI로, PostgreSQL, MySQL, SQLite, Cassandra를 지원하며 업/다운 마이그레이션 워크플로우를 포함한 데이터베이스 스키마 마이그레이션 관리를 위한 도구입니다.
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("Oh no ...")
// allErrors 슬라이스로 무언가 처리
}
// 비동기식 마이그레이션 함수 사용 ...
pipe := migrate.NewPipe()
go migrate.Up(pipe, "driver://url", "./path")
// pipe는 기본적으로 채널입니다
// 자신만의 채널 리스너를 작성하세요. 예시는 main.go의 writePipe()를 참조하세요.
마이그레이션 파일의 형식은 다음과 같습니다:
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 마이그레이션을 구분하기 위한 사용자 정의 마크업 언어가 필요 없습니다.
파일 확장자는 드라이버에 따라 달라진다는 점에 유의하세요.