如何使用来自 PostgreSQL 中另一个 table 列的值更新 JSONB 列
How to update JSONB column with value coming from another table column in PostgreSQL
我有一个来源 table,如下所示:
public.source
Id | part_no | category
1 | 01270-4 | Landscape
2 | 01102-3 | Sports
然后,我有目标 table 和 jsonb 列(组合),如下所示;
public.target
Id | part_no | combinations
7 | 01270-4 | {"subject":""}
8 | 01102-3 | {"subject":""}
我的问题是 - 如何使用 jsonb 列(组合)更新目标 table 以及使用 part_no 列的来自源 table 的值?
输出如:
Id | part_no | combinations
7 | 01270-4 | {"subject":"Landscape"}
8 | 01102-3 | {"subject":"Sports"}
我在下面尝试但给出错误:
UPDATE public.target t
SET combinations = jsonb_set(combinations,'{subject}','s.category',false)
FROM public.source s
WHERE s.part_no = t.part_no;
错误:类型 json 的输入语法无效
第 2 行:SET 组合 = jsonb_set(combinations,'{subject}', 's.categor...
^
详细信息:令牌“s”无效。
上下文:JSON 数据,第 1 行:s...
SQL状态:22P02
字符:77
您应该使用 to_jsonb
函数将 s.category
转换为 JSON
UPDATE public.target t
SET combinations = jsonb_set(combinations,'{subject}',to_jsonb(s.category),false)
FROM public.source s
WHERE s.part_no = t.part_no
或者您可以使用示例结构来连接和更新两个 JSON 字段:
UPDATE public.target t
SET combinations = combinations || jsonb_build_object('subject', s.category)
FROM public.source s
WHERE s.part_no = t.part_no
我有一个来源 table,如下所示:
public.source
Id | part_no | category
1 | 01270-4 | Landscape
2 | 01102-3 | Sports
然后,我有目标 table 和 jsonb 列(组合),如下所示;
public.target
Id | part_no | combinations
7 | 01270-4 | {"subject":""}
8 | 01102-3 | {"subject":""}
我的问题是 - 如何使用 jsonb 列(组合)更新目标 table 以及使用 part_no 列的来自源 table 的值?
输出如:
Id | part_no | combinations
7 | 01270-4 | {"subject":"Landscape"}
8 | 01102-3 | {"subject":"Sports"}
我在下面尝试但给出错误:
UPDATE public.target t
SET combinations = jsonb_set(combinations,'{subject}','s.category',false)
FROM public.source s
WHERE s.part_no = t.part_no;
错误:类型 json 的输入语法无效 第 2 行:SET 组合 = jsonb_set(combinations,'{subject}', 's.categor... ^ 详细信息:令牌“s”无效。 上下文:JSON 数据,第 1 行:s... SQL状态:22P02 字符:77
您应该使用 to_jsonb
函数将 s.category
转换为 JSON
UPDATE public.target t
SET combinations = jsonb_set(combinations,'{subject}',to_jsonb(s.category),false)
FROM public.source s
WHERE s.part_no = t.part_no
或者您可以使用示例结构来连接和更新两个 JSON 字段:
UPDATE public.target t
SET combinations = combinations || jsonb_build_object('subject', s.category)
FROM public.source s
WHERE s.part_no = t.part_no