Управление Liquibase хранимым Proc

Я прочитал рекомендации liquibase, в частности для управления хранимыми процедурами:

управление хранимыми процедурами: попробуйте сохранить отдельный журнал изменений для хранимых процедур и использовать runOnChange= "true". Этот флаг заставляет LiquiBase проверять, был ли изменен набор изменений. Если это так, то при опять-таки выполняет.

что они подразумевают под "поддерживать отдельный журнал изменений для хранимых процедур"?

обычно у меня есть каталог журналы изменений, связанные с выпусками. Каждый файл журнала изменений включен в master.xml.

какова будет структура каталогов при выполнении их рекомендаций?

1 ответов


то, что мы делаем, примерно так:

\---liquibase
    |   changelog.xml
    |   procedures.xml
    |   
    +---procedures
            procedure_one.sql
            procedure_two.sql

changelog.xml просто включает в себя procedures.xml. Внутри procedures.xml затем у нас есть что-то вроде этого:

<changeSet author="arthur" id="1" runOnChange="true" runInTransaction="true">
    <sqlFile path="procedures/procedure_one.sql"
             encoding="UTF-8"
             relativeToChangelogFile="true"
             endDelimiter=";"
             splitStatements="true"/>

</changeSet>

<changeSet author="arthur" id="2" runOnChange="true" runInTransaction="true">
    <sqlFile path="procedures/procedure_two.sql"
             encoding="UTF-8"
             relativeToChangelogFile="true"
             endDelimiter=";"
             splitStatements="true"/>

</changeSet>

конечно runInTransaction="true" имеет смысл только если ваша СУБД поддерживает транзакционный DDL.

каждый сценарий SQL для процедур является автономным и повторно создает процедуру с помощью create or replace. Для СУБД, которые не поддерживают create or replace мы обычно делаем (условно) drop procedure; create procedure ... там.

By явно включая файлы (вместо использования includeAll) у нас есть контроль над порядком, в котором создаются процедуры и функции (важно, если один использует другой).

если вы добавляете новую процедуру, вы добавляете новый сценарий SQL и новый набор изменений в procedures.xml