Откат Liquibase изменил размер столбца на более старую версию - PullRequest
0 голосов
/ 24 января 2020

У меня есть 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 голосов
/ 24 января 2020

Вы можете сделать это, но вы просто должны знать, что откат не будет работать во всех случаях.

Прежде чем углубляться в детали, рассмотрим этот мысленный эксперимент:

  • Вы обновляете с 1.0.0 до 1.1.0, расширяя столбец с 30 до 33.
  • добавлено много данных, но ни один не длиннее 30 символов
  • можно откатить изменение, если сама база данных позволит вам - вы не указали, какой тип базы данных вы используете, так что Сама база данных позволит это неясно. Согласно этому ответу , 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>
...