我正在使用Liquibase来管理项目的迁移。
我有几个表,其中包含几组种子数据。
每个种子表都有一个变更集来创建表,然后是一个变更集来加载种子数据。使用loadUpdateData加载种子。这是一种聪明的方法,可以从CSV加载种子数据,如果CSV内容被编辑,它将直接进行适当的编辑。
种子ChangeSet位于单独的ChangeLog中,该日志始终在核心ChangeLog之后运行。这样,种子文件始终可以反映正确的表结构。
我需要删除一个包含种子数据的表。 loadUpdateData命令错误,因为该表在运行时不再存在。
创建表变更集
<changeSet author="" id="create-table-help-items">
<createTable tableName="help_items">
<column name="help_item_id"
type="bigint">
<constraints primaryKey="true"/>
</column>
<column name="title"
type="text" />
<column name="description"
type="text" />
</createTable>
<rollback>
<dropTable tableName="help_items"/>
</rollback>
</changeSet>
种子更改集
<changeSet author="" id="seed-help-items" runOnChange="true">
<loadUpdateData file="db/seeds/help_items.csv"
primaryKey="help_items_id"
tableName="help_items" />
</changeSet>
删除表更改集
<changeSet author="" id="remove-table-help-items">
<dropTable tableName="help_items"/>
<rollback changeSetId="create-table-help-items" changeSetAuthor=""/>
</changeSet>
鉴于从变更日志中删除变更集是不明智的做法。
什么是创建种子迁移的正确方法,以使它们在删除表时不会中断?
我是否需要保留已删除表的种子文件?
答案 0 :(得分:0)
我遇到了同样的问题,现在我解决了,它已经对我有效。
重点是您应该在“ Drop Table ChangeSet”中正确设置回滚。
因此,通过删除表,您应该已经为回滚的情况做准备。
<changeSet author="" id="remove-table-help-items">
<dropTable tableName="help_items"/>
<rollback>
<createTable tableName="help_items"/>
</rollback>
</changeSet>
答案 1 :(得分:0)
我通过设置runAlways:对于loadUpdateData更改集为false来解决此问题。因此,在删除表时它不会失败。