Come aggiornare JSONB colonna con valore proveniente da un'altra colonna della tabella in PostgreSQL

0

Domanda

Ho una tabella di origine, in cui vengono elencate come di seguito:

pubblico.fonte

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

Allora, io ho la tabella di destinazione con jsonb colonna (combinazioni) , elenco che, come di seguito;

pubblico.destinazione

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

Il mio problema è - come posso aggiornare la tabella di destinazione con jsonb colonna (combinazioni) con i valori provenienti dalla tabella di origine utilizzando il part_no colonna?
Output del tipo:

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

Ho provato di seguito, ma a dare errore:

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 sintassi di tipo json LINEA 2: IMPOSTARE combinazioni = jsonb_set(combinazioni,'{oggetto}', 's.categor... ^ DETTAGLIO: Token "s" non è valido. CONTESTO: i dati JSON, riga 1: s... SQL stato: 22P02 Carattere: 77

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

Migliore risposta

1

Si dovrebbe usare to_jsonb funzione per la conversione 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

Oppure si può utilizzare la struttura di esempio per unirsi e l'aggiornamento di due JSON campo:

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

Perfetto! La RINGRAZIO molto Pooya. Tu sei l'uomo!
Bogart

In altre lingue

Questa pagina è in altre lingue

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