Можно ли заменить примененные наборы изменений Liquibase

Если я использую базу данных mysql с utf-8 и InnoDB, но liquibase вызывает ошибку, потому что размер строки таблицы слишком велик. У меня есть выпущенный набор изменений, который вызывает ошибку, поскольку превышает размер строки.

<changeSet author="author" id="id">
    <addColumn tableName="TABLE">
        <column name="COLUMN" type="VARCHAR(5000)" />   <!-- Row size is too long -->
    </addColumn>
</changeSet>

Решение проблемы с размером строки состоит в том, чтобы изменить «VARCHAR (5000)» на «TEXT», но проблема в том, что этот набор изменений был выполнен на некоторых системах, поэтому я не могу просто изменить его здесь.

Есть ли какое-либо решение, чтобы сообщить Liquibase, что он должен заменить набор изменений другим, если он еще не выполнен?


person Bernhard    schedule 21.05.2014    source источник


Ответы (1)


OK нашел решение для этого. Можно использовать validCheckSum, чтобы сообщить Liquibase, что этот набор изменений был изменен.

Я только что изменил набор изменений и добавил такой тег.

<changeSet author="author" id="id"> 
    <validCheckSum>oldChecksum</validCheckSum>
    <validCheckSum>newChecksum</validCheckSum>  
    <addColumn tableName="TABLE">
        <column name="COLUMN" type="TEXT" />
    </addColumn>
</changeSet>

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

<changeSet author="author" id="anotherId">
    <modifyDataType tableName="TABLE" columnName="COLUMN" newDataType="TEXT" />
</changeSet>
person Bernhard    schedule 22.05.2014
comment
Как вы оцениваете новую контрольную сумму? просто запустить скрипт liquibase на другой базе? - person Askar Kalykov; 18.12.2014
comment
Как узнать старую контрольную сумму и новую контрольную сумму? Когда я запускаю liquibase, он выводит только тот идентификатор, который не удалось выполнить. - person John Little; 07.08.2015