Ako aktualizovať JSONB stĺpec s hodnotou pochádzajúce z iného stĺpec tabuľky v PostgreSQL

0

Otázka

Mám zdroj tabuľke, ktorá zoznamy, ako je to uvedené nižšie:

verejné.zdroj

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

Potom som cieľovej tabuľky s jsonb stĺpec (kombinácie) , ktoré uvádzajú, ako je uvedené nižšie;

verejné.cieľ

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

Môj problém je - ako môžem aktualizovať cieľovej tabuľky s jsonb stĺpec (kombinácie) s hodnotami, pochádzajúcich zo zdroja tabuľky pomocou part_no stĺpca?
Výstup ako:

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

Snažil som sa nižšie, ale dáva chyba:

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 pre typ json RIADOK 2: NASTAVIŤ kombinácie = jsonb_set(kombinácie,'{predmet}', 's.categor... ^ DETAIL: Token "s", je neplatný. KONTEXT: JSON údaje, v riadku 1: s... SQL štát: 22P02 Znakov: 77

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

Najlepšiu odpoveď

1

Mali by ste použiť to_jsonb funkcia previesť s.category na 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

Alebo môžete použiť ukážka štruktúry pre pripojiť a aktualizovať dva JSON oblasti:

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ý! ĎAKUJEM VÁM veľmi pekne Pooya. Ste človek!
Bogart

V iných jazykoch

Táto stránka je v iných jazykoch

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