Как стать автором
Обновить

Liquibase: пример автоматизированного наката изменений на реляционную БД на примере Oracle HR Sample Schema

Время на прочтение2 мин
Количество просмотров24K

Вместо предисловия


Статья будет интересна тем, кто хоть раз задумывался о вопросе наката изменений (патча) на реляционную БД. Статья не будет интересна тем, кто уже освоил и использует Liquibase. Главной целью данной статьи является указание ссылки на репозиторий с примером использования. В качестве примера я выбрал накат sample-схемы HR на БД Oracle (список всех поддерживаемых БД) — любой желающий может скачать себе репозиторий и поиграться в домашних условиях. Желание продемонстрировать пример вызвано обсуждением этого вопроса на ресурсе sql.ru.


Что такое Liquibase


Что такое Liquibase, можно узнать на официальном сайте продукта. Хочется отметить пару хороших статей и на этом ресурсе:
Управление миграциями БД с Liquibase
Использование Liquibase без головной боли. 10 советов из опыта реальной разработки


Почему я использую Liquibase


Мой выбор остановился на этом инструменте, так как:


1) Инструмент отслеживает, какие changeset-ы уже были применены к данному экземпляру БД и накатывает только те, которые еще не накатывались и какие нужно еще донакатить. Если в процессе наката применение какого-либо изменения упало с ошибкой, то, после устранения причины вы перезапускаете накат и Liquibase продолжает выполнение с того changeset-а, на котором остановился.


2) Возможность выставить changeset-у атрибуты runOnChange и runAlways существенно упрощает управление изменениями, в частности, recreatable-объектов.


3) Свойство context позволяет выполнять/не выполнять changeset-ы в зависимости от текущего окружения (например, не запускать юнит-тесты на проде).


Это был не полный список фич.


Репозиторий


Он здесь. В нем приведены "hard" (таблицы, индексы, ограничения целостности) и "soft" (триггеры, процедуры, представления) объекты, changeset-ы с тегами sql и sqlFile, c атрибутами runOnChange и runAlways и без.


Чего нет в репозитории


Ввиду отсутствия необходимости в репозитории нет таких полезных фич/шагов, которые я обычно использую в своих проектах:


  • Preconditions — позволяют задавать условие выполнения changeset-a;
  • Компилирование объектов схемы в конце наката. В Oracle это dbms_utility.compile_schema(user, false);
  • Запуск юнит-тестов.
Теги:
Хабы:
Всего голосов 15: ↑8 и ↓7+1
Комментарии35

Публикации

Работа

Ближайшие события