Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
912 views
in Technique[技术] by (71.8m points)

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

I can't get my function to work in the liquibase changeset. This function is good working on the IntelliJ IDEA:

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

But it fails when trying to run it in the liquibase changeset like this:

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

I'm catching this exception:

[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] -> 

I think that I should correctly shield my function. I tried this way but it didn't work and I received the same error message. I continue to find a solution in this way.

<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>
question from:https://stackoverflow.com/questions/65924314/the-liquibase-exception-unterminated-dollar-quoted-string-at-or-near

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I found out about <createProcedure> tag and used it instead of <sql> tag in my changeset definition. That's resolved my problem. Now it's working fine.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...