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>
标记。那解决了我的问题。现在一切正常。
我无法让我的函数在 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>
标记。那解决了我的问题。现在一切正常。