#postgresql #select #key-value #jsonb
#postgresql #выберите #ключ-значение #jsonb
Вопрос:
Я хочу превратить значения 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
в инструкции «ВСТАВИТЬ В»
для заполнения таблицы ключ-значение.
эти записи должны быть заполнены в новую таблицу ключ-значение:
VideoId | xwseawq
Title | Armageddon
PublishedAt | 2012/01/01
Description | Armageddon is a film
ChannelTitle | Bruce Willis Movies
заранее спасибо
Джеральд
Ответ №1:
Используйте 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);