Что такое checksum и зачем он нужен?
Checksum (контрольная сумма) — это MD5-хеш, который Liquibase вычисляет для каждого changeset на основе его содержимого и сохраняет в столбце MD5SUM таблицы DATABASECHANGELOG.
Зачем нужен checksum
- Обнаружение изменений — при каждом запуске Liquibase сверяет текущий checksum changeset с сохранённым в БД. Если они не совпадают, значит, уже применённый changeset был изменён
- Защита целостности — гарантирует, что миграции идемпотентны и выполняются одинаково на всех окружениях
Что делать при ошибке checksum
Ошибка Validation Failed: X changeset(s) had their checksum changed возникает, когда содержимое уже применённого changeset было изменено.
Способы решения:
-
Откатить изменение changeset — вернуть его к исходному виду (предпочтительный вариант)
-
Выполнить clearCheckSums — сбрасывает все checksum, при следующем запуске они будут пересчитаны:
Пример
liquibase clearCheckSumsЭто безопасно, так как Liquibase просто пересчитает checksum для всех changeset-ов и запишет новые значения.
-
Установить validCheckSum — разрешить конкретный changeset с определённым checksum:
Пример
<changeSet id="1" author="ivanov"> <validCheckSum>8:a]b234cf56</validCheckSum> <validCheckSum>ANY</validCheckSum> <!-- ... --> </changeSet>
Ключевое правило: никогда не изменяйте уже применённые changeset-ы. Если нужно внести изменения — создайте новый changeset.
На собеседовании: интервьюер хочет услышать не только «что такое checksum», но и как действовать при ошибке. Частая ошибка — предлагать clearCheckSums как первый способ, тогда как правильный подход — не менять уже применённые changeset-ы.