2017-10-18 7 views
0

요약Liquibase 전제 조건을위한 Groovy 구문은 무엇입니까?

나는 그것이 존재하지 않는 경우 테이블에 열을 추가해야합니다.

열 이름 : myColumn

표 이름 : 그루비 언어를 사용 myTable에

및 Liquibase, 나는 열 존재를 확인하고 존재하지 않는 경우를 만들려고합니다.

Liquibase

XML 내 검색을 기반으로

이 달성 할 수있는 XML 패션이 될 것입니다 :

<changeSet id="myChangeSet" author="me"> 
    <preconditions onFail="WARN"> 
     <not> 
      <columnExists tableName="myTable" columnName="myColumn" />  
     </not> 
    </preconditions> 
    <addColumn tableName="myTable"> 
     <column name="myColumn" type="text" default="null" /> 
    </addColumn> 
</changeSet> 

그루비

Groovy 버전에 대해서는 확실치 않으며 테스트 할 수있는 방법이 없습니다.

changeSet(id:'myChangeSet', author:'me') { 
    preconditions(onFail:'WARN') { 
     not() { 
      columnExists(tableName='myTable' columnName='myColumn') 
     }    
    } 
    addColumn(tableName:'myTable') { 
     column(name:'myColumn' type:'text') { 
      constraint(default:'null') 
     } 
    }    
} 

위의 XML 버전이 Groovy로 변환되는 방법에 대한 Grrovy 구문이 확실하지 않습니다.

XML 변경 집합이 어떻게 Grovy로 변환 될까요?

+1

, 당신은 정말 전제 조건이 필요하지 않습니다. – SteveDonie

답변

0

변경 세트는 IMO가 좋지만, 'default'속성을 알지 못하며 column이나 제약 태그에 대해서도 알지 못합니다. tableName 및 columnName 뒤에있는 같음도 콜론이어야합니다. 그러나 XML 버전이 실행되는 경우 Groovy 버전도 실행됩니다.

not 줄에서 둥근 괄호를 생략 할 수 있습니다. onFail 값을 MARK_RAN으로 변경하여 다음에 liquibase가 실행하지 않도록 할 수도 있습니다.

나는 다음과 같은 순서의 변화를 테스트하는 것입니다 :

  • 은 변경 집합 실행에게 DATABASECHANGELOG 테이블에
  • 살펴 보자 열
  • 없이 테스트 DB를 사용하고 변경 집합을 검색합니다. EXECTYPE 열에 EXECUTED이 표시되고 DESCRIPTION 열에 멋진 것이 표시됩니다. DB가 예상대로 수정되었는지 확인하십시오.
  • DATABASECHANGELOG 테이블에서 변경 집합의 열을 삭제하고 응용 프로그램을 시작하거나 변경 로그를 다시 실행하십시오. 변경 집합이 다시 실행됩니다.
  • DATABASECHANGELOG 테이블을 다시 살펴보십시오. 이제 행을 다시 볼 수 있지만 EXECTYPEMARK_RAN이어야합니다.이미 Liquibase를 사용하는 경우