Liquibase error: unterminated dollar-quoted string at or near "$BODY$`
Chaneg log xml有一个条目:请参见下面的include file="/home/dev/....../admin_script.sql”
文件内容:
...............
CREATE OR REPLACE FUNCTION my_schema.function-name()
RETURNS smallint AS
$BODY$
DECLARE
v_next_gen_id smallint := 0;
BEGIN
..........
例外情况:
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$
感谢你帮我解决这个问题
8条答案
按热度按时间w8rqjzmb1#
几天前我也遇到了同样的问题。
如果我们使用以下格式将变更集添加到changelog.xml文件中,则不会起作用:
<include file="path/to/sqlfile" />
为了解决这个问题,我使用了另一种格式:
下面是一个链接,它给出了对Problem with dollar-quoted-in-postgresql的简要解释。
mfuanj7w2#
下面的解决方案来自official Liquibase forum。
如果你想完全使用SQL changelog,这个解决方案可以很好地工作(测试和确认):
如果您使用的是SQL Changelog文件,则可以将
$
Sign替换为Single Quote,将Single Quote替换为Double Single Quote''
所以详细说明一下:
$
将是'
$BODY$
将是'
'
将是''
示例:
ctzwtxfj3#
在
<changeSet>
定义中使用<createProcedure>
标记而不是<sql>
56lgkhnf4#
将
splitStatements:false
添加到变更集像这个
--changeset splitStatements:false
bvk5enib5#
我在使用sql-maven-plugin时也遇到过类似的错误。添加以下属性修复了问题
iswrvxsc6#
如果您使用的是SQL更改日志文件,则可以将$ Sign替换为Single Quote,将Single Quote替换为double Single Quote ''
8ljdwjyq7#
可以将splitStatements属性设置为false以避免此错误
2admgd598#
我也犯了同样的错误。将
$function$
和$body$
替换为$$
解决了问题。