Как обновить столбец JSONB значением, полученным из другого столбца таблицы в PostgreSQL

0

Вопрос

У меня есть исходная таблица, в которой перечислены, как показано ниже:

общедоступный источник

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

Затем у меня есть целевая таблица со столбцом jsonb (комбинации), список которых выглядит следующим образом;

общественность.цель

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

Моя проблема в том, как я могу обновить целевую таблицу с помощью столбца jsonb (комбинации) со значениями, поступающими из исходной таблицы, используя столбец part_no?
Вывод, как:

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

Я попытался ниже, но дал ошибку:

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

ОШИБКА: неверный синтаксис ввода для типа json СТРОКА 2: НАБОР комбинаций = jsonb_set(комбинации,'{тема}', 's.категория... ^ деталь: Маркер "s" недействителен. КОНТЕКСТ: данные JSON, строка 1: s... Состояние SQL: 22P02 Характер: 77

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

Лучший ответ

1

Вы должны использовать to_jsonb функция для преобразования s.category в JSON

ДЕМОНСТРАЦИЯ

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

Или вы можете использовать пример структуры для объединения и обновления двух полей JSON:

ДЕМОНСТРАЦИЯ

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

Идеально! БОЛЬШОЕ спасибо, Пуя. Ты тот самый мужчина!
Bogart

На других языках

Эта страница на других языках

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