我在Cordapp中使用liquibase脚本。以前,第一个版本的数据库更改日志文件将所有表创建放在一个更改集中,后来我们将其拆分为具有每个更改集的不同数据库更改日志。
现在的问题是一些生产测试环境中包含旧脚本的数据,但我们希望使用新脚本。
所做的改变就像→
旧:abc-master. xml包含abc-init.xml(通常的方式)|
现在:abc-master. xml包含abc-v1.xml,abc-v1.xml包含每个表创建的table-v1.xml文件
我们想的解决方案是,
创建名称略有更改的新表→然后在此处复制旧表中的数据→然后删除旧表。所以我们可以删除旧表和旧脚本(我假设)
仍然DATABASE CHANGELOG可能会有旧脚本数据,这会有问题吗?或者有更好的方法来做到这一点?
非常感谢。
我也在Liquibase论坛上回答了这个问题,但我会在这里复制给其他人。
文件名是datasechangelog表(ID/作者/文件名)上唯一键的一部分。因此,当您更改已执行的变更集的文件名时,根据Liquibase,这实际上是一个新的变更集。
我通常建议我的客户永远不要手动更新datasechangelog表,但在这种情况下,我认为这可能是您最好的行动方案。这样您的新文件结构就会正确地反映在datasechangelog表中。
我会在新文件结构上运行update-sql命令,针对您已经执行了chageset的数据库之一。这将显示哪些更改集正在等待,以及您需要更新的文件名的值。
我们计划与
<preConditions onFail="MARK_RAN">
<not>
<tableExists tableName="MY_NEW_TABLE"/>
</not>
</preConditions>
对于新分布式结构中的所有这些表创建变更集,我们的假设是:
我们可以在代码中单独保留这个新结构