1) 멱등 원 (Idempotent) 이주는 두 x 이상 실행될 수 있지만 한 x 만 실행 한 경우와 동일한 효과를 나타냄니다. 이를 달성하기 위해 데이터베이스 테이블을 수정할 때마다 테이블 작성 코드를 작성하는 데까지 갈 필요가 없습니다. 이것을 시도하는 것은 또한 매우 신속하게 유지하는 것이 불가능하게 될 것입니다.
기본적으로 이주 스크립트에 명령문을 작성할 때,이 명령문이 처음 실행되기 전에 데이터베이스의 상태를 알아야합니다. 이제 실행 된 적이 있더라도 오류없이 실행될 수 있도록 명령문을 수정해야하는지 생각하십시오.
예 : 데이터베이스는 상태 A에 당신은 B에 그걸 얻기 위해 마이그레이션 X를 실행하는 경우 :
M(A, x) -> B
그런 다음 데이터베이스 상태가 여전히 B되도록 x가 실행 된 경우에도 X를 작성해야 다시 :
M(B, x) -> B
이 (스크립트의 문 중 하나가 실패했지만 이전 사람이 성공했을 경우, 예를 들어 유용) 두 번 이상 같은 이주 스크립트를 실행 할 수 있습니다.
2) 다음으로 outOfOrder = true로 설정하면 이전 된 파일보다 이전 파일이 더 오래된 경우에도 아직 실행되지 않은 모든 파일을 실행할 수 있습니다. 따라서 x, y, z 세 순서로 (이 순서대로) x 및 z가 데이터베이스에 대해 실행되고 outOfOrder가 설정되지 않은 경우 z가 이미 실행되었으므로 flyway는 사용할 수있게되면 y를 실행하지 않습니다. 그러나 플래그를 true로 설정하면 기본적으로 y는 기본적으로 순서가 뒤떨어집니다 (z 이후). 이제 당신은 참으로 outOfOrder 설정하면
, 당신은이 가능성을 인식해야합니다 및 데이터베이스의 시작 상태는 데이터베이스에있는 지금은 두 개의 서로 다른 값을 가질 수 있습니다 전에 다음 A는 초기 인 경우
을 주 : Y는 RAN되기 전에
가
M(A, x) -> B
M(B, y) -> C
M(C, z) -> E
(Taking the state from A -> B -> C -> E)
M(A, x) -> B
M(B, z) -> D
M(D, y) -> E
(Taking the state from A -> B -> D -> E)
그래서, 상태 B 또는 D 일 수 중, Z는 RAN 전에 상태 이에 B 또는 C 일 수있다 하나는 Y 이주 스크립트 때문에 기록해야 그것은 멱등수 (idempotent) 일뿐만 아니라 시작 상태와 z가 실행 된 후에도 계속 작동 할 수 있습니다 (z는 올바르게 작동해야 함). f 또는 둘 다 B와 C 상태).