2017-10-12 8 views
0

저는 DB2 LUW 11.0에서 뷰를 생성하기 위해 Liquibase 3.5.3을 사용하고 있습니다. "replaceIfExists"속성을 true로 설정하고 런타임에 "replaceIfExists is not allowed to db2"오류를 표시합니다.Liquibase로 DB2 LUW에서 뷰 생성

나는 공식적으로이 속성이 Liquibase의 DB2에서는 지원되지 않지만 데이터베이스 API는이를 허용한다는 것을 알고있다. (필자는 수동으로 SQL 스크립트를 작성 또는 교체하고 잘 작동한다.)

DB2에서이 스크립트를 실행하거나이 기능을 구현할 수있는 몇 가지 일시적인 해결책이 있습니까?

예 : 다음 파일에 해당 스크립트를 넣어 것

CREATE OR REPLACE myView AS (
    SELECT * FROM myTable 
) 
+1

일부 플랫폼의 일부 버전의 Db2는 '보기 생성 또는 바꾸기'구문을 지원합니다. LUW (v9.5 이상) 및 i- 시리즈 (6.1 이상)가이 구문을 지원하지만 Z/OS 용 Db2는 버전 12에서 지원되지 않습니다. 따라서 liquibase가 변경되어야한다면 어떤 버전/플랫폼이 구문을 지원하는지 (또는 동적으로 감지해야 함) 필요합니다. 아마도 liquibase.jira.com에 참여할 것입니까? – mao

답변

1

는 변경 집합이 때문에 runOnChange

<changeSet author="arthur.dent" id="42" runOnChange="true"> 
    <sqlFile path="create_view.sql" 
      encoding="UTF-8" 
      relativeToChangelogFile="true" 
      stripComments="false" 
      splitStatements="false"/> 
</changeSet> 

, Liquibase이 포함됩니다에 대한 runOnChange="true"와 liquibase 내에서 파일을 포함 실제 SQL 파일의 체크섬이며 뷰의 정의가 변경된 경우에만이를 실행합니다.

또 다른 옵션은 runAlways="true"을 사용하고 Liquibase를 실행할 때마다보기가 다시 만들어집니다. 이것은 기본 테이블의 변경 사항을 자동으로 선택하는 데 필요합니다.