Cum de a actualiza JSONB coloana cu valoarea vine dintr-o altă coloană de tabel în PostgreSQL

0

Problema

Am o sursa de masă, care enumeră ca mai jos:

publice.sursa

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

Apoi, am tabel țintă cu jsonb coloana (combinații) , care lista ca mai jos;

publice.țintă

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

Problema mea este - cum pot actualiza tabelul de țintă cu jsonb coloana (combinații) cu valorile vine de la sursa de masă folosind part_no coloana?
De ieșire, cum ar fi:

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

Am încercat de mai jos, dar da eroare:

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

EROARE: invalid input sintaxă de tip json LINIA 2: SET de combinații = jsonb_set(combinații,'{subject}', 's.categor... ^ DETALII: Token "s" este invalid. CONTEXT: date JSON, linia 1: s... SQL stat: 22P02 Caracter: 77

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

Cel mai bun răspuns

1

Ar trebui să utilizați to_jsonb funcție pentru a converti s.category pentru 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

Sau puteți folosi structura eșantionului pentru a se alăture și de a actualiza două JSON domeniu:

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

Perfect! VĂ MULȚUMESC foarte mult Pooya. Tu ești omul!
Bogart

În alte limbi

Această pagină este în alte limbi

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