【问题标题】:Postgresql: how to convert a key value table into json without using an intermediate hstorePostgresql:如何在不使用中间 hstore 的情况下将键值表转换为 json
【发布时间】:2016-06-12 09:17:17
【问题描述】:

我有一个具有这种形式的键值 postgresql 表

pk | fk | key | value
---|----|-----|------
1  | 11 | k1  | v1
2  | 11 | k2  | v2
3  | 22 | k3  | v3
4  | 33 | k1  | v1
5  | 33 | kk  | vk
6  | 33 | kn  | vn

我需要转换为按 fk 分组的 json 对象:

fk | kv
---|------------
11 | {"k1": "v1", "k2": "v2"}
22 | {"k3": "v3"}
33 | {"k1": "v1", "kk": "vk", "kn": "vn"}

我已经找到了一种使用中间 hstore 转换的方法:

SELECT fk, hstore_to_json(hstore(array_agg(key), array_agg(value))) as kv
FROM tbl
GROUP BY fk, pk;

问题是,我无法在生产环境中使用 hstore 扩展,而且我无法安装它,是否有其他方法可以获得相同形式的输出?

PS:postgresql版本是9.4.8

【问题讨论】:

    标签: sql json postgresql key-value postgresql-9.4


    【解决方案1】:

    其实和hstore的版本很像:

    SELECT fk, json_object(array_agg(key), array_agg(value)) AS kv
    FROM tbl
    GROUP BY fk
    ORDER BY fk;
    

    产量:

    fk |                 kv
    ---+------------------------------------------
    11 | '{"k1" : "v1", "k2" : "v2"}'
    22 | '{"k3" : "v3"}'
    33 | '{"k1" : "v1", "kk" : "vk", "kn" : "vn"}'
    

    【讨论】:

    • 这对我有用,我没注意这个构造函数 json_object(keys text[], values text[])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    相关资源
    最近更新 更多