Как использовать Liquibase для генерации changelog из существующей БД?
Команда generateChangeLog создаёт changelog на основе текущей структуры БД. Это основной способ внедрения Liquibase в уже существующий проект.
Генерация через командную строку
Пример
liquibase --url=jdbc:postgresql://localhost:5432/mydb \
--username=admin \
--password=secret \
generateChangeLog \
--changelog-file=db/changelog/generated-changelog.xml
Генерация через Maven
Пример
mvn liquibase:generateChangeLog
Что генерируется
- Таблицы и столбцы
- Первичные ключи
- Внешние ключи
- Уникальные ограничения
- Индексы
- Представления (views)
- Последовательности (sequences)
Что НЕ генерируется
- Хранимые процедуры и функции
- Триггеры
- Данные в таблицах (для этого используется отдельная опция
--diffTypes=data)
Команда diff
Сравнение двух БД:
Пример
liquibase --url=jdbc:postgresql://localhost:5432/dev_db \
--username=admin \
--password=secret \
diff \
--referenceUrl=jdbc:postgresql://localhost:5432/prod_db \
--referenceUsername=admin \
--referencePassword=secret
diffChangeLog
Генерация changelog с различиями между двумя БД:
Пример команды diffChangeLog
liquibase --url=jdbc:postgresql://localhost:5432/dev_db \
--username=admin \
--password=secret \
diffChangeLog \
--referenceUrl=jdbc:postgresql://localhost:5432/prod_db \
--referenceUsername=admin \
--referencePassword=secret \
--changelog-file=diff-changelog.xml
Типичный сценарий внедрения Liquibase в существующий проект
-
Сгенерировать changelog из production БД:
Пример
liquibase generateChangeLog --changelog-file=initial-schema.xml -
Проверить и отредактировать сгенерированный changelog
-
Применить changelog с
changeLogSync(отметить все changeset-ы как выполненные без реального применения):Пример
liquibase changeLogSync -
С этого момента все новые изменения добавляются через обычные changeset-ы
Сгенерированный changelog следует рассматривать как отправную точку — его нужно просмотреть, подчистить и при необходимости переструктурировать.
На собеседовании: интервьюер часто спрашивает: «как внедрить Liquibase в проект, где БД уже существует?» Ключевой момент — не забыть про changeLogSync, иначе Liquibase попытается создать уже существующие таблицы. Частая ошибка — не упомянуть ограничения generateChangeLog (не генерирует процедуры и триггеры).