Post

Flyway

flyway는 DB에 schema_version 테이블을 유지하면서, DB 상태를 버전으로 관리 할 수 있게끔 도와준다.

(나중에 DB를 실행해도 버전에 맞게 데이터를 밀어넣어준다.)

DB에 데이터가 존재하는 상태에서 flyway를 적용할 때 발생하는 문제

1
2
Caused by: org.flywaydb.core.api.FlywayException: Found non-empty schema "SYSTEM" without metadata table! Use baseline() or set baselineOnMigrate to true to initialize the metadata table.
  • DB가 비어있지 않아(상태를 가지고 있어) flyway를 적용할 수 없다는 것. flyway를 사용하려면 DB 상태에 대한 버전 관리가 되어야 한다.
  • 설명 대로 baseline() 호출하면 현재 상태를 최초 상태 (V1) 으로 만들어준다.
  • 이렇게 되면 DB에 이미 V1이 존재하므로, V1 script가 있으면 migrate 시 이미 있는 버전이라고 예외가 발생한다. (V2 script 부터 migrate해야함)
  • 하지만 V1 부터 관리하는 것이 편하므로… baseline() 호출 전 baselineVersion을 0으로 설정하면, 초기 상태가 V0로 세팅되어 V1부터 migrate 가능하다.
This post is licensed under CC BY 4.0 by the author.