Liquibase : $BODY$ 或附近的未终止的美元引号字符串
Posted
技术标签:
【中文标题】Liquibase : $BODY$ 或附近的未终止的美元引号字符串【英文标题】:Liquibase : unterminated dollar-quoted string at or near $BODY$ 【发布时间】:2017-07-20 06:36:49 【问题描述】:您好,我正在努力解决该主题的问题。我有以下变更集:
<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 也不适合我。我在单独的文件中有这个过程,我使用splitStatements="false"
,但没有任何帮助。我总是收到这个错误。有谁知道这个问题的解决方法(这是 Liquibase 问题吗?)。我试图在一行中写这个,我试图使用斜线但没有成功。
【问题讨论】:
哪个 Liquibase 版本? @a_horse_with_no_name Liquibase 3.5.3 【参考方案1】:liquibase 的一个非常好的解决方法是使用不同的分隔符。我个人的选择只是双分号。
CREATE FUNCTION exampleFunction()
AS
$BODY$
BEGIN
SELECT 1;
END;
$BODY$
LANGUAGE plpgsql;;
<changeSet id="1" author="author">
<sqlFile path="example.sql" endDelimiter=";;"/>
</changeSet>
【讨论】:
为我工作。有点傻 - 但它完成了工作。【参考方案2】:我发现了这种行为的原因。在我的项目中,硬编码了一些旧版本的 postgresql 驱动程序。我已经切换到最新的(42.1.3),现在一切都很好。我的意思是很好,但仍然在 Liquibase 我需要在我的问题中描述的单独文件中使用过程 sql 的解决方法
【讨论】:
以上是关于Liquibase : $BODY$ 或附近的未终止的美元引号字符串的主要内容,如果未能解决你的问题,请参考以下文章
Liquibase ERROR 数据库 URL 未指定为参数或属性文件
Elasticsearch 的 Liquibase 或 Flyway 数据库迁移替代方案
Flyway 或 Liquibase 可以生成更新脚本而不是直接更新数据库吗?