Liquibase:美元引用的未结算字符串在$ BODY $或附近

时间:2017-07-20 06:36:50

标签: postgresql liquibase

嗨,我正在努力解决这个问题。我有以下变更集:

 <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中我总是遇到错误。我试图找到并回答,但thisthis也不适合我。我在seprate文件中有这个过程,我使用splitStatements="false"但没有任何帮助。我总是得到这个错误。有谁知道这个问题的解决方法(这是Liquibase问题吗?)。我试图在一行中写这个,我试图使用斜线但没有成功。

2 个答案:

答案 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>