Cómo actualizar JSONB columna con el valor que viene de otra columna de la tabla en PostgreSQL

0

Pregunta

Tengo una tabla de origen, que muestra como en la figura siguiente:

público.fuente

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

Entonces, he tabla de destino, con jsonb columna (combinaciones) , que lista como la siguiente;

público.objetivo

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

Mi problema es - ¿cómo puedo actualizar la tabla de destino, con jsonb columna (combinaciones) con los valores de la tabla de origen utilizando el part_no columna?
De salida como:

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

Traté de abajo pero dando error:

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

ERROR: invalid input sintaxis de tipo json LÍNEA 2: CONJUNTO de combinaciones = jsonb_set(combinaciones,'{asunto}', 's.categor... ^ DETALLE: Token "s" no es válido. CONTEXTO: datos JSON, línea 1: s... SQL estado: 22P02 Carácter: 77

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

Mejor respuesta

1

Usted debe utilizar to_jsonb función para convertir s.category a JSON

Demo

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

O puede utilizar la estructura de la muestra para unirse y actualización de dos campo de JSON:

Demo

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

Perfecto! Muchas GRACIAS Pooya. Tú eres el hombre!
Bogart

En otros idiomas

Esta página está en otros idiomas

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