提问者:小点点

想要用新脚本文件替换旧的liquibase迁移脚本文件


我在Cordapp中使用liquibase脚本。以前,第一个版本的数据库更改日志文件将所有表创建放在一个更改集中,后来我们将其拆分为具有每个更改集的不同数据库更改日志。

现在的问题是一些生产测试环境中包含旧脚本的数据,但我们希望使用新脚本。

所做的改变就像→

旧:abc-master. xml包含abc-init.xml(通常的方式)|

现在:abc-master. xml包含abc-v1.xml,abc-v1.xml包含每个表创建的table-v1.xml文件

我们想的解决方案是,

创建名称略有更改的新表→然后在此处复制旧表中的数据→然后删除旧表。所以我们可以删除旧表和旧脚本(我假设)

仍然DATABASE CHANGELOG可能会有旧脚本数据,这会有问题吗?或者有更好的方法来做到这一点?

非常感谢。


共2个答案

匿名用户

我也在Liquibase论坛上回答了这个问题,但我会在这里复制给其他人。

文件名是datasechangelog表(ID/作者/文件名)上唯一键的一部分。因此,当您更改已执行的变更集的文件名时,根据Liquibase,这实际上是一个新的变更集。

我通常建议我的客户永远不要手动更新datasechangelog表,但在这种情况下,我认为这可能是您最好的行动方案。这样您的新文件结构就会正确地反映在datasechangelog表中。

我会在新文件结构上运行update-sql命令,针对您已经执行了chageset的数据库之一。这将显示哪些更改集正在等待,以及您需要更新的文件名的值。

匿名用户

我们计划与

<preConditions onFail="MARK_RAN">
       <not>
           <tableExists tableName="MY_NEW_TABLE"/>
       </not>
   </preConditions>

对于新分布式结构中的所有这些表创建变更集,我们的假设是:

我们可以在代码中单独保留这个新结构