Liquibase 异常:在或附近未终止的美元引号字符串

The Liquibase Exception: unterminated dollar-quoted string at or near

我无法让我的函数在 liquibase 变更集中工作。 此功能在 IntelliJ IDEA 上运行良好:

CREATE OR REPLACE FUNCTION get_value() RETURNS varchar AS
$$
SELECT varchar '170d76f83d90ea1427' AS result;
$$ LANGUAGE SQL;

但是在像这样的 liquibase 变更集中尝试 运行 它失败了:

<changeSet author="akulik" id="test-014-002">
        <sql>
            CREATE OR REPLACE FUNCTION get_value() RETURNS varchar AS
            $$
                SELECT varchar '170d76f83d90ea1427' AS result;
            $$ LANGUAGE SQL;
        </sql>
        <rollback>
            <sql>
                DROP FUNCTION get_secret();
            </sql>
        </rollback>
</changeSet>

我正在捕获这个异常:

[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.2.2:update (default-cli) on project my_liquibase_project: Error setting up or running Liquibase: Migration failed for change set db/com/akulik/test/db/changesets/db.changelog-014.xml::test-014-002::akulik:
[ERROR]      Reason: liquibase.exception.DatabaseException: Error executing SQL CREATE OR REPLACE FUNCTION get_secret() RETURNS varchar AS
[ERROR]      $$
[ERROR]             SELECT varchar '170d76f83d90ea1427' AS result: ERROR: unterminated dollar-quoted string at or near "$$
[ERROR]             SELECT varchar '170d76f83d90ea1427' AS result"
[ERROR]   Position: 68
[ERROR] -> 

我认为我应该正确屏蔽我的功能。我试过这种方法,但没有用,我收到了同样的错误信息。 我继续以这种方式寻找解决方案。

<changeSet author="akulik" id="test-014-002">
        <sql><![CDATA[
            CREATE OR REPLACE FUNCTION get_value() RETURNS varchar AS
            $$
                SELECT varchar '170d76f83d90ea1427' AS result;
            $$ LANGUAGE SQL;
        ]]></sql>
        <rollback>
            <sql>
                DROP FUNCTION get_secret();
            </sql>
        </rollback>
</changeSet>

我发现了 <createProcedure> tag 并在我的变更集定义中使用它而不是 <sql> 标记。那解决了我的问题。现在一切正常。