嗨,我正在努力解决这个问题。我有以下变更集:
<changeSet author="artur" id="storedProcedures-0003">
<sqlFile dbms="postgresql"
encoding="utf8"
path="server/sql/storedProcedures/postgresql/procedure.sql"
relativeToChangelogFile="true"
splitStatements="false"
/>
</changeSet>
我的程序是:
CREATE FUNCTION testProc(oRefCursor OUT REFCURSOR)
AS $BODY$
DECLARE
minLevel INTEGER;
defDcId DECIMAL(19);
BEGIN
END;
$BODY$ LANGUAGE plpgsql;
此过程适用于pgAdmin工具,但在liquibase中我总是遇到错误。我试图找到并回答,但this和this也不适合我。我在seprate文件中有这个过程,我使用splitStatements="false"
但没有任何帮助。我总是得到这个错误。有谁知道这个问题的解决方法(这是Liquibase问题吗?)。我试图在一行中写这个,我试图使用斜线但没有成功。
答案 0 :(得分:1)
我发现了这种行为的原因。在我的项目中,硬编码了一些旧版本的postgresql驱动程序。我已经切换到最新的(42.1.3),现在一切都很好。我的意思是好的,但仍然在Liquibase中我需要在单独的文件中使用过程sql的解决方法,我在我的问题中描述了
答案 1 :(得分:0)
liquibase的一个很好的解决方法是使用其他定界符。我个人的选择只是双分号。
CREATE FUNCTION exampleFunction()
AS
$BODY$
BEGIN
SELECT 1;
END;
$BODY$
LANGUAGE plpgsql;;
<changeSet id="1" author="author">
<sqlFile path="example.sql" endDelimiter=";;"/>
</changeSet>