我使用Liquibase 3.5.3在DB2 LUW 11.0中创建视图。 我设置" replaceIfExists"属性为true,在运行时它给我一个"在db2"上不允许使用replaceIfExists;错误。
我知道Liquibase中的DB2不支持这个属性,但是数据库api允许它(我用create或replace手动执行sql脚本并且工作正常)。
在DB2中运行此脚本有一些解决方法,或者您可以实现此功能吗?
示例:
CREATE OR REPLACE myView AS (
SELECT * FROM myTable
)
答案 0 :(得分:1)
我会将该脚本放入一个文件中,然后将liquibase中的文件与runOnChange="true"
包含在changeSet中
<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时都会重新创建视图。这对于自动获取基础表中的更改是必要的。