sql - 我想合并或者我应该说在 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}]
解决方案
没有内置功能。但是您可以轻松定义自己的:
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)
推荐阅读
- c++ - 静态成员的方法
- angular - 从 Angular 4 中的普通集合重构代码以使用 rxjs 可观察对象
- ruby-on-rails - 使用不同的布局时,Rails Authenticity Token 无效
- python - 如何使用预训练的 keras 模型作为模型添加函数的参数?
- javascript - 鼠标移动太快并触发其他按钮功能 - JavaScript
- laravel - Laravel Nova Metrics Partition belongsToMany 关系
- django-models - f字符串插值语法错误python3.6
- react-native - 如何在 React Navigation Stacknavigator 中制作自定义 HeaderTitle?
- javascript - Chrome 扩展程序显示启用/禁用扩展程序的切换
- ansible - 访问角色的默认变量