Управление 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