我只是想对我的 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>
您可以为存储过程和函数创建 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"/>
它一直对我有用!希望这有帮助。