gpt4 book ai didi

postgresql - 将平面 jsonb 迁移到 hstore

转载 作者:行者123 更新时间:2023-11-29 13:00:02 32 4
gpt4 key购买 nike

我运行 postgres 9.4,并且想将我的数据库表中的列迁移到 hstore,以便能够进行性能比较。

我当前的列是 jsonb 中的键值对,没有嵌套结构。

有什么解决这个问题的技巧吗?

最佳答案

示例数据:

create table jsons (id int, val jsonb);
insert into jsons values
(1, '{"age":22}'),
(2, '{"height":182}'),
(3, '{"age":30, "height":177}');

将 json 对象拆分为 key, value 对:

    select id, (jsonb_each_text(val)).key, (jsonb_each_text(val)).value
from jsons

id | key | value
----+--------+-------
1 | age | 22
2 | height | 182
3 | age | 30
3 | height | 177
(4 rows)

聚合对并将它们转换为 hstore:

select id, hstore(array_agg(key), array_agg(value))
from (
select id, (jsonb_each_text(val)).key, (jsonb_each_text(val)).value
from jsons
) sub
group by 1
order by 1

id | hstore
----+------------------------------
1 | "age"=>"22"
2 | "height"=>"182"
3 | "age"=>"30", "height"=>"177"
(3 rows)

可以使用横向连接以更优雅的方式完成相同的操作:

select id, hstore(array_agg(key), array_agg(value))
from jsons
cross join jsonb_each_text(val)
group by 1
order by 1;

关于postgresql - 将平面 jsonb 迁移到 hstore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32987883/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com