在Liquibase中删除带有loadUpdateData变更集的表

时间:2018-07-17 16:57:55

标签: migration liquibase

设置

我正在使用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>

问题

鉴于从变更日志中删除变更集是不明智的做法。

  1. 什么是创建种子迁移的正确方法,以使它们在删除表时不会中断?

  2. 我是否需要保留已删除表的种子文件?

2 个答案:

答案 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来解决此问题。因此,在删除表时它不会失败。