如何将PostgreSQL中随机JSONB转换为键值(KV)表
PostgreSQL 无嵌套JSON字段转键值合并表实现方法
需求说明
现有包含无嵌套JSON字段的PostgreSQL表,需将JSON的键值对拆分,相同键的对应值合并为带引号的逗号分隔字符串,输出目标键值表。
实现SQL语句
假设原表名为your_table,JSON字段名为data,执行以下SQL即可得到目标结果:
SELECT key, string_agg('''' || value || '''', ', ') AS value FROM your_table, json_each_text(data) GROUP BY key ORDER BY key;
代码解析
json_each_text(data):将每个JSON对象展开为(key, value)格式的行记录,因JSON无嵌套,直接提取所有顶层键值对即可。GROUP BY key:按键分组,确保相同键的所有值被聚合到同一行。string_agg('''' || value || '''', ', '):将每个值用单引号包裹,再通过逗号分隔拼接成字符串,与目标格式完全匹配;若需保留数组类型,可替换为array_agg(value)。
结果验证
针对示例输入数据,执行后将输出:
| key | value |
|---|---|
| test | 'baa-1496', 'baa-1452' |
| test2 | 'baa-1431' |
| test3 | 'baa-1497' |
| test4 | 'baa-1597' |
内容的提问来源于stack exchange,提问作者Дима Шестаев
相关产品推荐
相关产品推荐

