如何使用Liquibase更改Oracle和HSQL数据库上的视图(HSQLDB上不支持replaceIfExists)
我们使用Liquibase来管理Oracle DB模式。我们还使用HSQL DB进行集成测试。我还想使用Liquibase来构建HSQL模式(它目前是通过java编程构建的——因此我在本例中使用Liquibase java API来触发它) 我们有几个视图变更集,每当其内容发生更改时,这些变更集都会在任何liquibase迁移结束时运行:如何使用Liquibase更改Oracle和HSQL数据库上的视图(HSQLDB上不支持replaceIfExists),oracle,integration-testing,hsqldb,liquibase,Oracle,Integration Testing,Hsqldb,Liquibase,我们使用Liquibase来管理Oracle DB模式。我们还使用HSQL DB进行集成测试。我还想使用Liquibase来构建HSQL模式(它目前是通过java编程构建的——因此我在本例中使用Liquibase java API来触发它) 我们有几个视图变更集,每当其内容发生更改时,这些变更集都会在任何liquibase迁移结束时运行: <changeSet id="VIEW_1" author="A1" runOnChange="true"> <createView
<changeSet id="VIEW_1" author="A1" runOnChange="true">
<createView viewName="VIEW_1" replaceIfExists="true">
SELECT ...
选择
针对HSQL DB的Liquibase不支持replaceIfExists
,因此此方法失败
我可以看到一些选择,但它们都很丑陋。有没有人找到更好的方法
runOnChange
replaceIfExists
和runOnChange
,HSQL DB将遵循第一种模式-删除(如果存在),然后创建。这意味着复制我们的视图逻辑replaceIfExists
-liquibase可以发出drop view命令,而不是依赖底层DB来处理它。很好,但是我没有时间找到了!使用
modifySql
元素(手册中未链接到该元素!):
选择
找到了!使用modifySql
元素(手册中未链接到该元素!):
选择
也在上也在上
<changeSet id="VIEW_1" author="A1" runOnChange="true">
<createView viewName="VIEW_1">
SELECT ...
</createView>
<modifySql dbms="oracle">
<replace replace="CREATE VIEW" with="CREATE OR REPLACE VIEW"/>
</modifySql>
</changeSet>