Comment mettre à jour JSONB colonne avec la valeur provenant d'une autre colonne du tableau dans PostgreSQL

0

La question

J'ai une table source, qui liste comme ci-dessous:

public.source

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

Puis, j'ai de la table cible avec jsonb colonne (combinaisons) , qui liste comme ci-dessous;

public.cible

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

Mon problème est comment je peux mettre à jour la table cible avec jsonb colonne (combinaisons) avec les valeurs provenant de la source de la table à l'aide de la part_no de la colonne?
Sortie comme:

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

J'ai essayé ci-dessous, mais en lui donnant d'erreur:

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

ERREUR: invalid input syntaxe de type json LIGNE 2: DÉFINIR les combinaisons = jsonb_set(combinaisons,'{objet}', 's.categor... ^ DÉTAIL: Jeton "s" n'est pas valide. CONTEXTE: les données JSON, ligne 1: s... État SQL: 22P02 Caractère: 77

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

La meilleure réponse

1

Vous devez utiliser to_jsonb la fonction de convertir s.category en JSON

Démo

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

Ou vous pouvez utiliser les exemples de structure pour les rejoindre et de mettre à jour deux champ JSON:

Démo

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

Parfait! MERCI beaucoup Pooya. Vous êtes l'homme!
Bogart

Dans d'autres langues

Cette page est dans d'autres langues

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