我正在尝试使用 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 中呢?
文档说:
美元引用的字符串常量由美元符号 (
)、零个或多个字符的可选“标签”、另一个美元符号、构成字符串内容的任意字符序列、美元符号、与此美元报价开头相同的标签和美元符号。$
所以你可以使用例如
DO
$abc$
BEGIN
UPDATE public.ted_talk SET ... WHERE title = '"Interpassion" / "Ba$$in"';
...
END;
$abc$;