Liquibase存储Proc的管理

Dav*_*ave 9 liquibase

我读了liquibase的最佳实践,特别是用于管理存储过程:

管理存储过程:尝试为存储过程维护单独的更改日志,并使用runOnChange ="true".此标志强制LiquiBase检查变更集是否已修改.如果是这样,liquibase再次执行更改.

"为存储过程维护单独的更改日志"是什么意思?

我通常有一个与发布链接的更改日志目录.每个更改日志文件都包含在master.xml.

在遵循他们的建议时,目录结构会是什么?

a_h*_*ame 13

我们做的是这样的:

\---liquibase
    |   changelog.xml
    |   procedures.xml
    |   
    +---procedures
            procedure_one.sql
            procedure_two.sql
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

当然,runInTransaction="true"只有DBMS支持事务DDL才有意义.

过程的每个SQL脚本都是自包含的,并使用重新创建过程create or replace.对于不支持的DBMS,create or replace我们通常drop procedure; create procedure ...在那里做一个(有条件的).

通过明确地包含文件(而不是使用includeAll),我们可以控制创建过程和函数的顺序(如果使用另一个,则很重要).

如果添加新过程,则将新的SQL脚本和新的changeSet添加到 procedures.xml