Открыть сервис

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 →