Liquibase 回滚将列大小更改为旧版本

Liquibase rollback altered column size to older version

我有 2 个更新日志版本:1.0.0 和 1.1.0

在1.0.0中有个叫的字段,我们称它为"x_amount"类型为VARCHAR2(仅作说明),大小为30 在1.1.0版本我想修改"x_amount"的大小为33.

如果我需要回滚到 1.0.0 版本,我该如何编写回滚的变更集,以便在 1.1.0 版本中添加的数据为 33 个字符而不会丢失任何数据?

你可以做到,但你只需要知道回滚并非在所有情况下都有效。

在进入细节之前,考虑这个思想实验:

  • 您从 1.0.0 更新到 1.1.0,将列从 30 扩大到 33。
  • 添加了很多数据,但是none超过了30个字符
  • 如果数据库本身允许,则可以回滚更改 - 您没有指定正在使用的数据库类型,因此尚不清楚数据库本身是否允许。 According to this answer,如果 none 的数据丢失,Oracle 将允许它。
  • 有人使用数据库,将数据插入到超过30的加宽列中
  • 现在不可能在不丢失数据的情况下回滚该更改。

因此,如果您使用的是 Oracle,则变更集可以如下所示:

<changSet id="widen-foo-column" author="victor">
  <modifyDataType tableName="some_table" columnName="foo"
        newDataType="VARCHAR2(33)"/>
  <rollback>
    <modifyDataType tableName="some_table" columnName="foo"
          newDataType="VARCHAR2(30)"/>
  </rollback>
</changeSet>