如何将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);
以上是关于如何将postgres jsonb字段的属性插入键值表?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Slick 在 Postgres 中将 json 对象插入到 jsonb 类型的列中
PostgreSQL:如何对包括 JSONB 字段的属性求和,并保留表格形状?