Комментарии 11
Активно используем liquibase в своем проекте (крупный enterprise). Могу сказать, что использование changeset-ов с XML возможно только для небольших приложений с довольно простой структурой бд. Как только появляется необходимость сложной миграции с кучей таблиц, вьюх, запросами к другим бд через dblink — без нативного SQL не обойтись.
Самая главная проблема — отладка. Гораздо легче руками написать в каком нибудь GUI запрос, проверить и добавить в changeset, чем мучаться с XML, возможности которого сильно ограничены.
Единственный минус — все rollback нужно писать руками, а это не всегда возможно. Но у нас редко возникает необходимость откатить состояние бд до прошлых версий
Активно используем liquibase в своем проекте (крупный enterprise). Могу сказать, что использование changeset-ов с XML возможно только для небольших приложений с довольно простой структурой бд. Как только появляется необходимость сложной миграции с кучей таблиц, вьюх, запросами к другим бд через dblink — без нативного SQL не обойтись.
Самая главная проблема — отладка. Гораздо легче руками написать в каком нибудь GUI запрос, проверить и добавить в changeset, чем мучаться с XML, возможности которого сильно ограничены.
Единственный минус — все rollback нужно писать руками, а это не всегда возможно. Но у нас редко возникает необходимость откатить состояние бд до прошлых версий
Но мне кажется лучше использовать гибрид (xml/yaml) + чистый sql в файлах (mtm_property_tickler.sql)
SCDB — супер-пользователь для запуска (знает только ответственный DevOps)
MOBILE — премонтированная папка со скриптами для каждой схемы и нужной структурой с которой работает разработчик DB.
Вот пример
databaseChangeLog:
- changeSet:
id: tag-7.1
author: sergey_p
context : dev,preprod
changes:
- tagDatabase:
tag: 7.1
- changeSet:
id: sql_recomp_rollback
author: sergey_p
context : dev,preprod,prod
changes:
rollback:
- sqlFile:
dbms: oracle
encoding: utf8
path: MOBILE/recomp.sql
relativeToChangelogFile: true
splitStatements: false
stripComments: false
- changeSet:
id: sql_file_insert
author: sergey_p
context : dev,preprod,prod
changes:
- sql:
dbms: oracle
sql: ALTER SESSION SET CURRENT_SCHEMA = MOBILE
- sqlFile:
dbms: oracle
encoding: cp1251
path: MOBILE/data/mtm_property_tickler.sql
relativeToChangelogFile: true
splitStatements: true
stripComments: false
rollback:
- sql:
dbms: oracle
sql: ALTER SESSION SET CURRENT_SCHEMA = MOBILE
- sqlFile:
dbms: oracle
encoding: cp1251
path: MOBILE/data/rollback/mtm_property_tickler.sql
relativeToChangelogFile: true
splitStatements: true
stripComments: false
- sql:
dbms: oracle
sql: ALTER SESSION SET CURRENT_SCHEMA = SCDB
- changeSet:
id: sql_file_body
author: sergey_p
context : dev,preprod,prod
changes:
- sql:
dbms: oracle
sql: ALTER SESSION SET CURRENT_SCHEMA = MOBILE
- sqlFile:
dbms: oracle
encoding: cp1251
path: MOBILE/packages/body/sale_to_billing.sql
relativeToChangelogFile: true
splitStatements: false
stripComments: false
rollback:
- sql:
dbms: oracle
sql: ALTER SESSION SET CURRENT_SCHEMA = MOBILE
- sqlFile:
dbms: oracle
encoding: cp1251
path: MOBILE/packages/body/rollback/sale_to_billing.sql
relativeToChangelogFile: true
splitStatements: false
stripComments: false
- sql:
dbms: oracle
sql: ALTER SESSION SET CURRENT_SCHEMA = SCDB
- changeSet:
id: sql_recomp
author: sergey_p
context : dev,preprod,prod
changes:
- sqlFile:
dbms: oracle
encoding: utf8
path: MOBILE/recomp.sql
relativeToChangelogFile: true
splitStatements: false
stripComments: false
rollback:
Выбор между XML и SQL для накатывания скриптов LiquiBase на примере Java/Spring/H2