Liquibase error: unterminated dollar-quoted string at or near "$BODY$`
Chaneg log xml has one entry: see below include file="/home/dev/....../admin_script.sql"
content of the file:
...............
CREATE OR REPLACE FUNCTION my_schema.function-name()
RETURNS smallint AS
$BODY$
DECLARE
v_next_gen_id smallint := 0;
BEGIN
..........
Exception:
liquibase.exception.DatabaseException: Error executing SQL CREATE OR REPLACE FUNCTION function name()
ETURNS smallint AS
$BODY$
DECLARE
v_next_gen_id smallint := 0: ERROR: unterminated dollar-quoted string at or near "$BODY$
Appreciate any help to resolve this
I just encountered the same issue days ago.
It does not work if we add the changeset into changelog.xml file using the format below:<include file="path/to/sqlfile" />
To work around, I use another format:
<changeSet author="authour_name" id="your_id">
<sqlFile path="path/to/sqlfile" splitStatements="false"/>
</changeSet>
Here is the link which gives a brief explanation to Problem with dollar-quoted-in-postgresql.
Use <createProcedure>
tag instead of <sql>
in your <changeSet>
definition
The solution below is from official Liquibase forum.
If you want to use SQL changelog fully, this solution works fine (tested and confirmed):
If you are using SQL Changelog file then you can replace $
Sign with Single Quote and Single Quote with double Single Quote ''
So to elaborate:
$
will be '
$BODY$
will be '
'
will be ''
Example:
CREATE OR REPLACE FUNCTION public.testingfunctions()
RETURNS TABLE("DistributorCode" character varying)
LANGUAGE plpgsql
AS '
begin
RETURN QUERY
select * from testtable;
-- .
-- .
-- . somewhere in the function
RAISE NOTICE ''OPEN deleted customer_avatar'';
END;'
Add splitStatements:false
to changeset
Like this --changeset splitStatements:false
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With