PostgreSQL 13如何将两列多行数据转换为键值对形式JSON对象
PostgreSQL 多行两列聚合为单个JSON对象方案
PostgreSQL 原生提供了专门的聚合函数处理这类场景,无需手动拼接字符串:
- 要返回标准
json类型结果,使用json_object_agg - 要返回
jsonb类型结果(推荐,性能更好、支持丰富的JSON操作符与索引),使用jsonb_object_agg
可直接运行的SQL
-- 返回json类型 SELECT json_object_agg(key, value) FROM mytable; -- 返回jsonb类型 SELECT jsonb_object_agg(key, value) FROM mytable;
执行后得到的结果完全符合预期:
{"key1":"value1","key2":"value2","key3":"value3"}
原有写法的问题
之前尝试的jsonb_agg(jsonb_build_object(key ,value))逻辑是为每一行生成一个独立的单键值对JSON对象,再把这些独立对象聚合成数组,因此最终输出的是对象数组结构,不是合并后的单个JSON对象。
注意事项:如果表中存在重复的key值,聚合时后出现的value会覆盖同key的旧值,符合JSON键唯一的语法要求。
内容的提问来源于stack exchange,提问作者cadolbeau
相关产品推荐
相关产品推荐

