使用Liquibase在DB2LUW中创建视图

使用Liquibase在DB2LUW中创建视图,db2,liquibase,db2-luw,Db2,Liquibase,Db2 Luw,我正在使用Liquibase 3.5.3在DB2LUW11.0中创建一个视图。 我将“replaceIfExists”属性设置为true,并在运行时给我一个“replaceIfExists在db2上是不允许的”错误 我知道在Liquibase中DB2不支持这个属性,但数据库api允许它(我使用create或replace手动执行sql脚本,工作正常) 在DB2中运行这个脚本有一些变通方法,或者您可以实现这个特性吗 例如: CREATE OR REPLACE myView AS ( SEL

我正在使用Liquibase 3.5.3在DB2LUW11.0中创建一个视图。 我将“replaceIfExists”属性设置为true,并在运行时给我一个“replaceIfExists在db2上是不允许的”错误

我知道在Liquibase中DB2不支持这个属性,但数据库api允许它(我使用create或replace手动执行sql脚本,工作正常)

在DB2中运行这个脚本有一些变通方法,或者您可以实现这个特性吗

例如:

CREATE OR REPLACE myView AS (
    SELECT * FROM myTable
)

我会将该脚本放入一个文件中,然后使用变更集的
runOnChange=“true”
从liquibase中包含该文件

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

由于
runOnChange
,Liquibase将包含实际SQL文件的校验和,并且仅在视图的定义更改时才运行它


另一个选项是使用
runAlways=“true”
,然后每次运行Liquibase时都会重新创建视图。这对于自动获取基础表中的更改是必要的

某些平台上的Db2的某些版本支持“创建或替换视图”语法。虽然LUW(高于v9.5)和i-series(高于6.1)都支持这种语法,但DB2forz/OS(版本12)不支持这种语法。因此,如果要更改liquibase,它需要知道(或动态检测)哪些版本/平台支持该语法。也许可以加入liquibase.jira.com?