Liquibase: система управления версиями базы данных¶
Liquibase — это программный инструмент с открытым исходным кодом для управления версиями схемы базы данных (database schema migration), позволяющий описывать изменения структуры БД в декларативном виде и применять их последовательно в различных средах. Liquibase относится к классу инструментов миграции схемы (schema migration tools) и широко используется в процессах непрерывной интеграции и доставки (CI/CD) для синхронизации структуры базы данных с версиями приложения.
¶История
Проект Liquibase был основан Натаном Воксом (Nathan Voxland) в 2006 году. Изначально инструмент разрабатывался как внутреннее решение для автоматизации обновлений схемы в коммерческом проекте, однако позже был опубликован под либеральной лицензией Apache License 2.0. В 2012 году была основана компания Liquibase Corporation (позже переименованная в Datical), которая взяла на себя коммерческую поддержку и развитие продукта. В 2020 году проект был передан в управление некоммерческой организации Linux Foundation, что укрепило его независимость и привлекло дополнительное сообщество разработчиков. По состоянию на 2024 год Liquibase является одним из наиболее распространённых инструментов миграции БД наряду с Flyway, поддерживая широкий спектр систем управления базами данных (СУБД).
¶Принцип работы
Основная идея Liquibase заключается в том, что изменения схемы базы данных описываются в виде упорядоченного набора изменений (changesets), которые хранятся в файлах, называемых changelog. Каждый changeset содержит одно или несколько атомарных изменений (changes), например, создание таблицы, добавление колонки или создание индекса.
При применении миграций Liquibase ведёт учёт выполненных changesets в специальных таблицах базы данных (по умолчанию DATABASECHANGELOG и DATABASECHANGELOGLOCK). Таблица DATABASECHANGELOG хранит метаданные о каждом применённом наборе изменений: идентификатор, автора, имя файла и контрольную сумму. Это позволяет инструменту определять, какие изменения ещё не были применены, и выполнять только новые changesets. Таблица блокировки предотвращает одновременное выполнение миграций несколькими экземплярами приложения.
¶Форматы описания изменений
Liquibase поддерживает несколько форматов для описания changelog:
- XML — исторически первый формат, использующий пространство имён
http://www.liquibase.org/xml/ns/dbchangelog`. Обеспечивает строгую валидацию и полный набор возможностей. - YAML — более компактный и читаемый формат, набирающий популярность в современных проектах.
- JSON — формат, удобный для интеграции с инструментами на основе JavaScript.
- SQL — формат, позволяющий писать изменения на чистом SQL для конкретной СУБД, однако в этом случае теряется часть кроссплатформенной абстракции.
Декларативные форматы (XML, YAML, JSON) используют абстрактные конструкции (например, <createTable>), которые Liquibase транслирует в диалект конкретной СУБД. Это позволяет использовать один и тот же changelog для разных типов баз данных без изменений.
¶Ключевые возможности
¶Управление версиями и откат
Liquibase позволяет не только применять изменения, но и откатывать их (rollback). Для каждого changeset может быть определена логика обратного изменения. Откат может выполняться как для отдельных changesets, так и для целых тегов (tag), что позволяет возвращать схему к определённой точке в истории.
¶Прекондишены и контексты
Механизм прекондишенов (preconditions) позволяет задавать условия, которые должны выполняться до применения changeset. Например, можно проверить существование таблицы или версию СУБД. Контексты (contexts) дают возможность группировать changesets и применять их выборочно в зависимости от окружения (разработка, тестирование, продакшн). Параметры (parameters) позволяют делать changelog динамическим, подставляя значения из внешних источников.
¶Разделение ответственности
Для крупных проектов Liquibase поддерживает подключение дополнительных changelog-файлов через тег <include> или <includeAll>. Это позволяет структурировать миграции по модулям или функциональным областям системы.
¶Интеграция с инструментами сборки
Liquibase предоставляет интерфейсы командной строки (CLI), а также плагины для Apache Maven, Gradle, Ant. Существуют интеграции с популярными фреймворками, такими как Spring Boot (через библиотеку liquibase-core), что позволяет автоматически запускать миграции при старте приложения.
¶Поддерживаемые СУБД
Liquibase поддерживает более 30 систем управления базами данных, включая:
- Реляционные: PostgreSQL, MySQL, MariaDB, Oracle Database, Microsoft SQL Server, IBM Db2, H2, HSQLDB.
- Облачные сервисы: Amazon Redshift, Google Cloud Spanner, Snowflake, CockroachDB.
- Прочие: SQLite, Firebird, Informix, Apache Derby и другие.
Степень поддержки может различаться: для некоторых СУБД доступны все типы изменений, для других — ограниченный набор. Полный список поддерживаемых баз и их особенностей публикуется в официальной документации проекта.
¶Применение
Основная область применения Liquibase — автоматизация управления схемой базы данных в жизненном цикле разработки программного обеспечения. Типичные сценарии использования:
- Синхронизация схемы между средами: разработчик вносит изменения в локальную базу, фиксирует changeset в системе контроля версий, и эти же изменения автоматически применяются на тестовых и боевых серверах.
- Командная разработка: несколько разработчиков могут параллельно создавать changesets; при слиянии кода Liquibase корректно разрешает последовательность применения.
- Автоматическое развёртывание: интеграция с CI/CD-конвейерами (Jenkins, GitLab CI, GitHub Actions) позволяет выполнять миграции без ручного вмешательства.
- Аудит изменений: таблица
DATABASECHANGELOGхранит полную историю применённых изменений, что полезно для соответствия требованиям регуляторов и внутреннего контроля.
¶Сравнение с Flyway
Наиболее близким аналогом Liquibase является инструмент Flyway. Основные различия между ними:
- Формат описания: Flyway использует исключительно SQL-скрипты с версионной нумерацией в имени файла, тогда как Liquibase предлагает декларативные форматы и автоматическую генерацию SQL под конкретную СУБД.
- Механизм отслеживания: Flyway использует простую таблицу
flyway_schema_historyи определяет новые миграции по номерам версий; Liquibase использует идентификаторы changesets и контрольные суммы, что даёт большую гибкость при переупорядочивании. - Откат изменений: в бесплатной версии Flyway откат не поддерживается (только «чистая» пересоздаваемая миграция), в то время как Liquibase предоставляет механизм rollback в базовой версии.
- Сложность освоения: Flyway считается более простым в изучении, тогда как Liquibase требует понимания концепций changelog, changeset и прекондишенов, но предоставляет более мощные возможности для сложных сценариев.
Выбор между инструментами зависит от предпочтений команды, требований к кроссплатформенности и необходимости поддержки откатов.
¶Лицензирование и версии
Liquibase распространяется в двух редакциях:
- Liquibase Community (Open Source) — бесплатная версия под лицензией Apache License 2.0, содержит основной функционал для управления миграциями.
- Liquibase Pro — коммерческая версия с расширенными возможностями: автоматическая генерация откатов, расширенная поддержка политик безопасности, приоритетная техническая поддержка и инструменты для анализа влияния изменений.
Актуальная версия проекта на начало 2025 года — Liquibase 4.30. Инструмент требует установки Java Runtime Environment (JRE) версии 8 или выше.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →

