Как вставить атрибуты поля jsonb postgres в таблицу ключ-значение? - PullRequest
0 голосов
/ 25 марта 2019

Я хочу превратить значения jsonb в таблицу значений ключа в одном выражении

Мой пример кода:

CREATE TABLE public.searchdatacache
( querysig text, "values" jsonb );
INSERT INTO searchdatacache (querysig, values)
VALUES 
(
'ytApiSearch://Armageddon trailer',
'[
  {"VideoId"      : "xwseawq"},
  {"Title"        : "Armageddon"},
  {"PublishedAt"  : "2012/01/01"},
  {"Description"  : "Armageddon is a film"},
  {"ChannelTitle" : "Bruce Willis Movies"}
]'
)

SELECT jsonb_array_elements(values) from searchdatacache where querysig =    'ytApiSearch://Armageddon trailer'

возвращает:

"{"VideoId": "xwseawq"}"
"{"Title": "Armageddon"}"
"{"PublishedAt": "2012/01/01"}"
"{"Description": "Armageddon is a film"}"
"{"ChannelTitle": "Bruce Willis Movies"}"

данные, возвращаемые оператором select, пока выглядят нормально, но теперь я хочу использовать этот оператор select внутри оператора «INSERT INTO» для заполнения таблицы ключ-значение.

эти записи должны быть заполнены новым ключом -таблица значений:

VideoId      | xwseawq
Title        | Armageddon
PublishedAt  | 2012/01/01
Description  | Armageddon is a film
ChannelTitle | Bruce Willis Movies

заранее спасибо Gerald

1 Ответ

1 голос
/ 26 марта 2019

Используйте jsonb_array_elements в предложении from вместе с jsonb_each_text, чтобы получить готовые для вставки пары значений ключа.

select s.key,s.value
       from searchdatacache cross join lateral
             jsonb_array_elements(values) as j(e)
    cross join lateral jsonb_each_text(j.e) as s(key,value);

Демо

...