liquibase postgres 函数没有被替换

问题描述 投票:0回答:1

我只是想对我的 postgres 函数进行一些修改。 liquibase 日志报告“已创建存储过程”,并按预期显示更改集 id,但当我检查数据库对象时,该函数仍然具有旧代码。

我尝试先将其放入 sql 块中,但这不起作用。它抱怨我必须首先删除所有依赖它的表。还尝试使用 runOnChange/ runAlways 标志,但无济于事。

日志片段

2023-10-12 16:34:10.808 INFO 29604 --- [主要] liquibase.changelog :创建存储过程 2023-10-12 16:34:10.811 信息 29604 --- [ 主要] liquibase.changelog :变更集 db/changelog/service/triggers/TRIGGER_AUDIT.xml::AUDIT_TRIGGER_2::ran 10毫秒内成功

编辑代码

    <changeSet author="me" id="AUDIT_TRIGGER_1">
        <createProcedure dbms="postgresql">
            create or replace function audit_trigger() RETURNS trigger
            language plpgsql
                AS
            $audit_trigger$
            begin
                    // CODE
            end;
            $audit_trigger$
        </createProcedure>


    <changeSet author="me" id="AUDIT_TRIGGER_2">
        <createProcedure dbms="postgresql">
            create or replace function audit_trigger() RETURNS trigger
            language plpgsql
                AS
            $audit_trigger$
            begin
                    // NEW CODE
            end;
            $audit_trigger$
        </createProcedure>
postgresql stored-procedures liquibase
1个回答
0
投票

您可以为存储过程和函数创建 SQL 更改日志,并将其包含在主 XML 更改日志文件中。请参阅下面的示例程序。

--liquibase formatted sql
--changeset auther:someid-1.0 splitStatements:false runOnChange:true
CREATE OR REPLACE PROCEDURE myproc_of_function_name( <Your args if any> )
LANGUAGE 'plpgsql'
AS $BODY$
BEGIN
    <....your stuff here...>
END;
$BODY$
--rollback empty

请注意 splitStatements 和 runOnChange 标签很重要。在底部的回滚标签中,您可以添加空的或有效的回滚语句。

要包含在主文件中,请使用以下标签

<include file="yourpath/sql/yourSqlChangeLogFileName.sql"/>

它一直对我有用!希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.