首页 > 解决方案 > 我想合并或者我应该说在 postgres 中更新多个 jsonb 列

问题描述

我有一个作为 sensor_info 的列,它是 jsonb 类型的列。该列可以包含这样的

{"temp":54, "humidity":34}
{"pressure":34}
{"switch":"on"}
{"temp":60, "humidity":78}

这可以认为是一列的多个记录。这记录我必须将它们组合成具有最新键值的一列。喜欢-

{"temp":60, "humidity":78, "pressure":34, "switch":"on"}

我试过了,json_agg但它返回了类似的东西[{"temp":54, "humidity":34},{"pressure":34},{"switch":"on"},{"temp":60, "humidity":78}]

标签: sqljsonpostgresql

解决方案


没有内置功能。但是您可以轻松定义自己的:

create aggregate jsonb_merge_agg(jsonb) 
(
  sfunc = jsonb_concat(jsonb, jsonb),
  stype = jsonb
);

然后你可以像这样使用它:

select jsonb_merge_agg(sensor_info)
from the_table;

JSON 值只能包含每个键一次,并且聚合将保留“最后一个”。如果您想控制哪个键是“最后一个”键,则需要按顺序排列,例如jsonb_merge_agg(sensor_info order by created_at)


推荐阅读