2017-10-12 66 views
0

我使用Liquibase 3.5.3在DB2 LUW 11.0中创建视图。 我将“replaceIfExists”属性设置为true,并且在运行时给它一个“db2上不允许replaceIfExists”的错误。使用Liquibase在DB2 LUW中创建视图

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

在DB2中运行此脚本有一些解决方法,或许您可以实现此功能吗?

例子:

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

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

回答

1

我愿意把这个脚本到一个文件,然后包括将文件从liquibase内与runOnChange="true"的变更

<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时都会重新创建视图。这对于自动获取基础表中的更改是必要的。