Pull to refresh

Comments 11

Свойство nullable для primaryKey=«true» — это прекрасно. Вообще в xml варианте явно избыточность информации. За это его очень не любят
Хм, в SQL указываются те же атрибуты, что и для XML: и автора можно, и что там будет ещё нужно. Так что не аргумент :)

Активно используем liquibase в своем проекте (крупный enterprise). Могу сказать, что использование changeset-ов с XML возможно только для небольших приложений с довольно простой структурой бд. Как только появляется необходимость сложной миграции с кучей таблиц, вьюх, запросами к другим бд через dblink — без нативного SQL не обойтись.
Самая главная проблема — отладка. Гораздо легче руками написать в каком нибудь GUI запрос, проверить и добавить в changeset, чем мучаться с XML, возможности которого сильно ограничены.
Единственный минус — все rollback нужно писать руками, а это не всегда возможно. Но у нас редко возникает необходимость откатить состояние бд до прошлых версий

Активно используем liquibase в своем проекте (крупный enterprise). Могу сказать, что использование changeset-ов с XML возможно только для небольших приложений с довольно простой структурой бд. Как только появляется необходимость сложной миграции с кучей таблиц, вьюх, запросами к другим бд через dblink — без нативного SQL не обойтись.
Самая главная проблема — отладка. Гораздо легче руками написать в каком нибудь GUI запрос, проверить и добавить в changeset, чем мучаться с XML, возможности которого сильно ограничены.
Единственный минус — все rollback нужно писать руками, а это не всегда возможно. Но у нас редко возникает необходимость откатить состояние бд до прошлых версий

чем мучаться с XML, возможности которого сильно ограничены — нуу не совсем, у него огромная поддержка инструкций. На мой взгляд, даже намного читабельные, чем просто файл с SQL
Для инита достаточно data.sql Древний и проверенный способ. А в статье извините описан мегакостыль, к которому еще вопросы есть. Что мешает создать схему, и заполнять ее с ORM? Зачем создавать себе сложности, и героически их решать?
data.sql — ну такое. Это если проект у тебя домашний какой-нибудь)

тогда уж schema.sql+data.sql


но Liquibase не про инициирование БД, а про её миграции

Да нее, ну надо же было что-нибудь положить в бд) Вот dporollo и не понравился мой подход
Спасибо за статью.
Но мне кажется лучше использовать гибрид (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:
Only those users with full accounts are able to leave comments. Log in, please.