Jak aktualizovat JSONB sloupec s hodnotu z jiného sloupce tabulky v PostgreSQL

0

Otázka

Mám zdroj tabulka, která uvádí jako níže:

veřejnosti.zdroj

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

Pak jsem cílovou tabulku s jsonb sloupec (kombinací) , které seznamu jako níže;

veřejnosti.cíl

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

Můj problém je - jak mohu aktualizovat cílové tabulky s jsonb sloupec (kombinace) s hodnotami pocházející ze zdrojové tabulky pomocí part_no sloupec?
Výstup, jako je:

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

Zkoušel jsem níže, ale dává chybová zpráva:

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 syntax pro typ json LINKA 2: NASTAVENÍ kombinace = jsonb_set(kombinace,'{předmět}', 's.kateg... ^ DETAIL: Token "s" je neplatný. KONTEXT: JSON dat, linka 1: s... SQL státu: 22P02 Charakter: 77

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

Nejlepší odpověď

1

Byste měli použít to_jsonb funkce pro převod s.category do 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

Nebo můžete použít vzorek strukturu připojit a aktualizovat dvě JSON pole:

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

Perfektní! DĚKUJI moc Pooya. Ty jsi ten muž!
Bogart

V jiných jazycích

Tato stránka je v jiných jazycích

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