在postgres查询中用另一个更新json项

时间:2013-10-24 09:50:12

标签: json postgresql

我正在使用最新的postgres 9.3,它支持json并且还查询json字段中的特定键。但是在更新json字段时我遇到了问题。

基本上,我的json列是一个包含某些字段频率的字典,现在由于字段是动态的,我把它们放在json结构中。现在我在更新查询中遇到麻烦,我只想添加该json dict的相应字段的频率。

所以,如果我有这样的话 - {“a”:10,“b”:2},并且更新传入的项目是{“a”:2,“c”:3},我的新行应该有{“a”:12,“b”:2,“c”:3}

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你可以在PostgreSQL中做这样的事情:

update Test1 as t set
    data = (
        select
        ('{' || string_agg(a.data, ',') || '}')::json
        from (
            select '"' || a.key || '" :' || sum(a.value::int)::text as data
            from (
                select * from json_each_text(t.data)
                union all
                select * from json_each_text('{"a":2,"c":3}'::json) -- incoming
            ) as a
            group by a.key
       ) as a
   )

但是编写Python(或其他PL)函数可能更容易。