Есть ли способ объединить набор изменений в liquibase?

Предположим, что необходимо добавить 2 столбца в таблицу и изменить 1. Из чистого представления дизайна мне нужно создать 3 набора изменений с 3 различными предварительными условиями: 2 столбца существуют, 1 столбец имеет неправильный тип.

Это понятный подход к дизайну, но он приводит к 3 отдельным таблицам изменений, что может быть очень дорого. Например, MySql копирует или перестраивает всю таблицу при добавлении или изменении столбца. Зато позволяет объединить несколько измененных операторов в один. Но один изменяющий набор изменений должен сочетать предварительные условия, что невозможно - должен ли я выполнять большое изменение, когда одно из них истинно или все?

Итак, есть ли способ просмотреть несколько предварительных условий и построить таблицу изменений только из успешных предварительных условий?


person Cherry    schedule 10.05.2016    source источник
comment
Примечание о предварительных условиях: как правило, вам следует просто полагаться на отслеживание журнала изменений Liquibase, чтобы узнать, был ли применен набор изменений или нет. Предварительные условия иногда бывают полезны, но если вы полагаетесь исключительно на них, чтобы определить, что должно быть выполнено, обычно плохой запах кода заключается в том, что изменения в базе данных недостаточно хорошо контролируются. Просто убедитесь, что вы используете предварительные условия только для изолированных проверок, чтобы вернуть базы данных в соответствие.   -  person Nathan Voxland    schedule 10.05.2016


Ответы (1)


Для MySQL, если у вас есть тег addColumn с несколькими вложенными столбцами, он сгенерирует один оператор ALTER TABLE, который одновременно добавляет все столбцы.

Вы можете вложить несколько предварительных условий в блоки «и» и «или», поэтому у вас может быть один набор изменений, который проверяет, отсутствует ли столбец 1 И столбец 2, и если оба отсутствуют, то запустите addColumns с обоими перечисленными столбцами. Затем следующий набор изменений может проверить отсутствующий столбец1, следующий — отсутствующий столбец2, а следующий — неправильный тип данных.

Вам нужно, чтобы для атрибута предварительных условий onFail было установлено значение «MARK_RAN», чтобы они просто помечались при запуске и не переоценивались постоянно при каждом обновлении.

person Nathan Voxland    schedule 10.05.2016
comment
Пришел к такому же подходу. - person Cherry; 13.05.2016