- PVSM.RU - https://www.pvsm.ru -

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

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

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

Что такое Liquibase

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

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

Мой выбор остановился на этом инструменте, так как:
1) Инструмент отслеживает, какие changeset-ы уже были применены к данному экземпляру БД и накатывает только те, которые еще не накатывались и какие нужно еще донакатить. Если в процессе наката применение какого-либо изменения упало с ошибкой, то, после устранения причины вы перезапускаете накат и Liquibase продолжает выполнение с того changeset-а, на котором остановился.
2) Возможность выставить changeset-у атрибуты runOnChange и runAlways существенно упрощает управление изменениями, в частности, recreatable-объектов.
3) Свойство context позволяет выполнять/не выполнять changeset-ы в зависимости от текущего окружения (например, не запускать юнит-тесты на проде).

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

Репозиторий

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

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

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

  • Preconditions [7] — позволяют задавать условие выполнения changeset-a;
  • Компилирование объектов схемы в конце наката. В Oracle это dbms_utility.compile_schema(user, false);
  • Запуск юнит-тестов.

Автор: akk0rd87

Источник [8]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/postgresql/264725

Ссылки в тексте:

[1] список всех поддерживаемых БД: http://www.liquibase.org/databases.html

[2] sql.ru: http://www.sql.ru/forum/1272875/version-control-dlya-pl-sql

[3] официальном сайте: http://www.liquibase.org/

[4] Управление миграциями БД с Liquibase: https://habrahabr.ru/post/178665/

[5] Использование Liquibase без головной боли. 10 советов из опыта реальной разработки: https://habrahabr.ru/post/179425/

[6] здесь: https://github.com/akk0rd87/OracleSampleSchemas-HR

[7] Preconditions: http://www.liquibase.org/documentation/preconditions.html

[8] Источник: https://habrahabr.ru/post/339084/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best