Liquibase 无法使用 loadUpdateData 插入包含 $$ 的数据

问题描述 投票:0回答:1

我正在尝试使用 Liquibase 从 csv 读取数据,并且自然地尝试使用

loadUpdateData
。我的 csv 有标题列,即
varchar

某些记录的数据包含

$$
,这些记录在使用 liquibase 插入时会出错。当我检查日志中的查询时,它显示如下:

DO
$$
BEGIN
UPDATE public.ted_talk SET author = ' Yelle', date = 'June 2018', likes = 7700, link = 'https://ted.com/talks/yelle_interpassion_ba_in', views = 259000 WHERE title = '"Interpassion" / "Ba$$in"';
IF not found THEN
INSERT INTO public.ted_talk (title, author, date, views, likes, link) VALUES ('"Interpassion" / "Ba$$in"', ' Yelle', 'June 2018', 259000, 7700, 'https://ted.com/talks/yelle_interpassion_ba_in');
END IF;
END;
$$

如您所知,$$ 被定义为分隔符以包含代码块,如果数据包含 $$,则无法解析它。如何转义 $$ 以便 liquibase 检测到正确的字符串并将其存储在数据库中。

我尝试使用像

\
这样的转义字符,但这没有帮助。

参考了https://stackoverflow.com/questions/935/string-literals-and-escape-characters-in-postgresql并且能够在开头添加E并直接在DB中成功执行。

但是我怎样才能把它放入 liquibase 中呢?

postgresql liquibase
1个回答
0
投票

文档说:

美元引用的字符串常量由美元符号 (

$
)、零个或多个字符的可选“标签”、另一个美元符号、构成字符串内容的任意字符序列、美元符号、与此美元报价开头相同的标签和美元符号。

所以你可以使用例如

DO
$abc$
BEGIN
   UPDATE public.ted_talk SET ... WHERE title = '"Interpassion" / "Ba$$in"';
   ...
END;
$abc$;
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.