2012-07-16 437 views
0

我有最初为PostreSQL定义的liquibase架构。现在,我必须修改模式文件以支持Oracle。我有一个变更集,它有一个<sql>标记。它有一个查询访问pg_catalog表以设置序列的值。但是,这对Oracle不起作用。如果我将其删除,Liquibase会抱怨check-sum验证失败。它抱怨,即使我有一个空的<sql>标签或其中指定的其他查询。在这个变更集中,我有很多其他的create-table语句,所以我不能只从dbms属性中删除oracle。有没有什么办法可以抑制这个SQL运行Oracle?Liquibase:自定义SQL语句

回答

1

在DBMS的changeset属性是设计来处理这个问题的机制.....听起来像你想一个changesest内做太多的(但我猜你想通了这一点)

校验和验证失败是liquibase的安全机制,旨在防止数据库被篡改模式文件。

如何解决它是运行liquibase时使用clearChecksums选项。它告诉liquibase重新计算数据库中已有变更集的校验和。这将使您的postgres数据库实例能够接受对您为Oracle所做的变更集的更改。

+0

是的,我的模式文件对所有create-table语句(大约69个表格)都有一个变更集,这是遗留代码并且已经在生产中,所以我无法更改它的重构。但clearChecksums会重新计算所有变更集,是吗?如果是这样,我宁愿避免冒这个风险。 – devang 2012-07-16 21:55:00

+1

@gotuskar是的,它会重新计算所有的变更集,但没关系,前提是您只更改了一个变更集。变更集是liquibase用来确保变更集与之前应用的变更集相同的机制。这也是liquibase如何支持“runOnChange”属性(只有在更改后才应用变更集)。我建议在生产数据库的副本上进行测试。 – 2012-07-16 22:14:37

+0

由于我将应用程序移植到Oracle,因此我更改了许多更改集,这就是为什么我阻止使用此选项。 – devang 2012-07-16 22:24:05