【发布时间】:2013-10-15 11:12:42
【问题描述】:
我们使用 Liquibase 来管理我们的 Oracle DB 架构。我们还使用 HSQL DB 进行集成测试。我也想使用 Liquibase 来构建 HSQL 模式(它目前是从 java 以编程方式构建的 - 所以我在这个实例中使用 Liquibase java API 来触发它)。
我们有几个视图更改集,只要它们的内容发生更改,它们就会在任何 liquibase 迁移结束时运行:
<changeSet id="VIEW_1" author="A1" runOnChange="true">
<createView viewName="VIEW_1" replaceIfExists="true">
SELECT ...
Liquibase for HSQL DB 不支持replaceIfExists,所以这种方法失败了。
我可以看到一些选项,但它们都很难看。有没有人找到更好的方法?
如果存在,则删除每个视图,然后在每次迁移时创建。这可行,但即使是很小的更改也会产生大量冗余 SQL - 它会破坏
runOnChange。为 HSQL DB 和 Oracle 使用重复的变更集 - Oracle 将使用
replaceIfExists和runOnChange,HSQL DB 将遵循第一个模式 - 如果存在则删除,然后创建。这意味着复制我们的视图逻辑。检查 liquibase 代码并尝试在 HSQL DB 上支持
replaceIfExists- Liquibase 可以发出 drop view 命令,而不是依赖底层 DB 来处理它。很好,但我没时间!
【问题讨论】:
标签: oracle integration-testing hsqldb liquibase