如何将postgres jsonb字段的属性插入键值表?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将postgres 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语句返回的数据到目前为止看起来还不错,但现在我想在“INSERT INTO”语句中使用这个select语句来填充键值表。

这些记录应填入新的键值表:

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

提前感谢杰拉尔德

答案

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);

Demo

以上是关于如何将postgres jsonb字段的属性插入键值表?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Slick 在 Postgres 中将 json 对象插入到 jsonb 类型的列中

如何仅从 postgres 获取特定键的 jsonb?

PostgreSQL:如何对包括 JSONB 字段的属性求和,并保留表格形状?

从 Postgres 中的 JSONB 字段中选择不为空的值

展平来自 JSONB 字段的聚合键/值对?

postgres如何进行条件连接