在json字符串中插入变量



我使用下面的代码创建一个函数,该函数使用json对象更新jsonb列,如果它不存在,则创建它-在此帖子的帮助下

然而,我真的有麻烦插入变量$2和$3在json字符串。有什么建议吗?

CREATE OR REPLACE FUNCTION public.updateoffset(site text, offsetnumber integer, toscrape integer)
RETURNS void
LANGUAGE sql
AS $function$

update settings set "offset" = coalesce("offset", '{}') || '{"$2": {"toscrape":3$}}'
where site = $1;
$function$ 

不要使用字符串插值来构建JSON值-使用JSON函数和操作符代替,特别是json_build_object:

update settings
set "offset" = coalesce("offset", '{}') || json_build_object($2, json_build_object('toscrape', $3))
where site = $1;

也可以更简单地使用json_set:

update settings
set "offset" = json_set(coalesce("offset", '{}'), ARRAY[$2::text,'toscrape'], $3)
where site = $1;

(但是,它在内部对象中保留了其他属性,而不是将其完全替换为只有toscrape作为键的对象)

使用format()函数

...
update settings
set "offset" = 
coalesce("offset", '{}') || format('{"%s": {"toscrape":%s}}', $2, $3)::jsonb
where site = $1;
...

相关内容

  • 没有找到相关文章

最新更新