Como atualizar JSONB coluna com o valor proveniente de outra coluna da tabela no PostgreSQL

0

Pergunta

Eu tenho uma tabela de origem, a qual apresenta, como abaixo:

público.origem

Id | part_no | category
1 | 01270-4 | Landscape
2 | 01102-3 | Sports

Então, eu tenho a tabela de destino com jsonb coluna (combinações) , que lista como abaixo;

público.alvo

Id | part_no | combinations
7 | 01270-4 | {"subject":""}
8 | 01102-3 | {"subject":""}

Meu problema é que - como eu posso atualizar a tabela de destino com jsonb coluna (combinações) com os valores provenientes de fonte de tabela usando o part_no coluna?
De saída, como:

Id | part_no | combinations
7 | 01270-4 | {"subject":"Landscape"}
8 | 01102-3 | {"subject":"Sports"}

Eu tentei seguir, mas dando erro:

UPDATE public.target t
SET combinations = jsonb_set(combinations,'{subject}','s.category',false)
FROM public.source s
WHERE s.part_no = t.part_no;

ERRO: erro de sintaxe de entrada para o tipo json LINHA 2: CONJUNTO de combinações = jsonb_set(combinações, {assunto}', 's.categor... ^ DETALHE: o Símbolo "s" é inválido. CONTEXTO: dados JSON, linha 1: s... Estado de SQL: 22P02 Caracteres: 77

jsonb postgresql
2021-11-16 15:03:01
1

Melhor resposta

1

Você deve usar to_jsonb a função de converter-se s.category para JSON

Demonstração

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

Ou você pode usar a estrutura da amostra para associação e atualização de dois JSON campo:

Demonstração

UPDATE public.target t
SET combinations = combinations || jsonb_build_object('subject', s.category)
FROM public.source s
WHERE s.part_no = t.part_no
2021-11-16 15:26:04

Perfeito! Muito OBRIGADO Pooya. Você é o cara!
Bogart

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................