Как это работает :
Из документации Liquibase:
logicalFilePath
- используется для переопределения имени файла и пути при создании уникального идентификатора наборов изменений. Требуется при перемещении или переименовании журналов изменений.
Liquibase вычисляет контрольную сумму MD5 набора изменений на основе:
- содержимого набора изменений;
- id набора изменений;
- автор набора изменений;
- путь и имя вашего файла changeLog или
logicalFilePath
;
Если вы ничего не меняйте в вашем наборе изменений и просто попытайтесь перезапустить его, Liquibase посмотрит на databasechangelog.id
, databasechangelog.author
, databasechangelog.FILENAME
и databasechangelog.MD5SUM
, и если все будет так же, как было то набор изменений будет пропущен.
Если вы измените содержимое набора изменений, liquibase выдаст ошибку, что контрольная сумма была изменена (в то время как databasechangelog.id
, databasechangelog.author
и databasechangelog.FILENAME
остаются неизменными).
Если вы измените идентификатор, автора или путь (logicFilePath) , то Liquibase подумает, что это новый набор изменений и попытается выполнить его.
Почему у вас есть проблемы :
Liquibase относится к вам u измените значение как новое, и при появлении ошибки:
обновление не удалось с ошибкой дублирующегося столбца
Я полагаю, у вас нет preConditions
в ваш набор изменений или их недостаточно,
Как вы это исправите:
Итак, поскольку liquibase считает, что вы выполняете новый набор изменений, ничто не остановит вас после записи этих:
<preConditions onFail="MARK_RAN">
<not>
<columnExists tableName="your_table" columnName="your_column"/>
</not>
</preConditions>
и поскольку your_table.your_column
уже существует в базе данных, этот набор изменений будет помечен как databasechangelog.EXECTYPE=MARK_RAN
и пропущен.
Проблема решена!