Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle Liquibase:自定义SQL语句_Oracle_Postgresql 9.1_Liquibase - Fatal编程技术网

Oracle Liquibase:自定义SQL语句

Oracle Liquibase:自定义SQL语句,oracle,postgresql-9.1,liquibase,Oracle,Postgresql 9.1,Liquibase,我的liquibase模式最初是为PostreSQL定义的。现在,我必须修改模式文件以支持Oracle。我有一个带有标记的变更集。它有一个查询,可以访问pg_catalog表来设置序列的值。但是,这对Oracle不起作用。如果我删除它,Liquibase会抱怨校验和验证失败。即使我有一个空的标记或其中指定的其他查询,它也会抱怨。在这个变更集中,我有许多其他CREATETABLE语句,所以我不能仅仅从dbms属性中删除oracle。有什么方法可以阻止此sql在Oracle上运行吗?上的dbms属性

我的liquibase模式最初是为PostreSQL定义的。现在,我必须修改模式文件以支持Oracle。我有一个带有
标记的变更集。它有一个查询,可以访问
pg_catalog
表来设置序列的值。但是,这对Oracle不起作用。如果我删除它,Liquibase会抱怨校验和验证失败。即使我有一个空的
标记或其中指定的其他查询,它也会抱怨。在这个变更集中,我有许多其他CREATETABLE语句,所以我不能仅仅从dbms属性中删除oracle。有什么方法可以阻止此sql在Oracle上运行吗?

上的dbms属性是为处理此问题而设计的机制。。。。。听起来你想在一次变革中做太多的事情(但我想你已经明白了)

校验和验证失败是liquibase的安全机制,旨在保护数据库不被他人篡改模式文件


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

是的,我的架构文件对所有create table语句(大约69个表)都有一个更改集,这是遗留代码,已经在生产中,因此我无法更改或重构它。但是clearchecksum会重新计算所有变更集,对吗?如果是这样,我宁愿避免冒险。@gotuskar是的,它将重新计算所有变更集,但这没关系,只要您只更改了一个变更集。变更集是liquibase用来确保提供的变更集与以前应用的变更集相同的机制。这也是liquibase如何支持“runOnChange”属性(仅当变更集已更改时应用变更集)。我建议在生产数据库的副本上进行测试。由于我将应用程序移植到Oracle,我更改了许多更改集,这就是为什么我不使用此选项的原因。@gotuskar事实上,您已经更改了构成架构的更改集。哦,好吧,在这种情况下,听起来好像你被迫分支(或分叉)你的模式。是的,到现在为止,我已经分离出了模式代码。我仍然在考虑clearChecksums选项。我可能只有一个更改集存在校验和冲突。对于其他更改集,我刚刚将oracle添加到dbms属性中,因此它们不会影响。但是,我仍然很害怕继续这个选择。我对LiquiBase很陌生,所以我不确定我会测试哪些其他角落案例。