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>
我有 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>