Jak zaktualizować kolumnę JSONB wartością z innej kolumny tabeli w PostgreSQL

0

Pytanie

Mam oryginalna tabela, w której przedstawiono, jak pokazano poniżej:

publiczny źródło

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

Następnie mam docelowa tabela z kolumną jsonb (kombinacji), których lista wygląda następująco;

opinia publiczna.celem

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

Mój problem polega na tym, jak mogę zaktualizować tabeli docelowej za pomocą kolumny jsonb (kombinacja) z wartościami pochodzącymi z oryginalnej tabeli, stosując kolumnę part_no?
Wniosek, jak:

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

Próbowałem poniżej, ale dał się błąd:

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

BŁĄD: nieprawidłowa składnia wejścia dla typu json WIERSZ 2: ZESTAW kombinacji = jsonb_set(kombinacji,'{temat}', 's.kategoria... ^ szczegół: Znacznik "s" jest nieprawidłowy. KONTEKST: dane JSON, wiersz 1: s... Stan SQL: 22P02 Charakter: 77

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

Najlepsza odpowiedź

1

Musisz użyć to_jsonb funkcja do konwersji s.category w JSON

DEMONSTRACJA

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

Lub można użyć przykład struktury stowarzyszenia i aktualizacji dwóch pól JSON:

DEMONSTRACJA

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

Idealnie! Dziękuję BARDZO, Пуя. Jesteś ten mężczyzna!
Bogart

W innych językach

Ta strona jest w innych językach

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