PostgreSQL 9.3:向JSON类型添加新字段

PostgreSQL 9.3:向JSON类型添加新字段,json,postgresql,Json,Postgresql,如果我想在PostgreSQL 9.3中为JSON类型添加另一个字段,请有人向我解释一下我必须做什么?似乎有很多函数可以从JSON中获取数据,但没有任何函数可以简单地添加另一个字段。还是我忽略了什么 例如,如果我有以下关系: Id| Data (JSON) 1 | {"items": ["abc", "def", "ghi"], "user_id": 328252955} 2 | {"items": ["klm"], "user_id": 328250000} 3 | {"items":

如果我想在PostgreSQL 9.3中为JSON类型添加另一个字段,请有人向我解释一下我必须做什么?似乎有很多函数可以从JSON中获取数据,但没有任何函数可以简单地添加另一个字段。还是我忽略了什么

例如,如果我有以下关系:

Id|     Data (JSON)
1 | {"items": ["abc", "def", "ghi"], "user_id": 328252955}
2 | {"items": ["klm"], "user_id": 328250000}
3 | {"items": ["abc", ghi], "user_id": 328252955}
...
如果我想在第一行添加一个名为“name”且内容为“foo bar”的字段,我该怎么办


谢谢你的帮助。非常感谢

总是有Python

create or replace function jsonset(orig json, attr text, val json)
  returns json language plpythonu as
  $$
  import json
  odict = json.loads(orig)
  odict[attr] = json.loads(val)
  return json.dumps(odict)
  $$;
然后你可以做:

update mytable set 
  Data = jsonset(Data, 'name', '"foo bar"'::json)
  where Id = 1;

答案很简单:你不能——至少不能用SQL。你总是需要重写整个专栏,我很担心。感谢您的anwser。9.4可能会添加函数来操作json(添加字段等),但它仍然需要设置整个列,这只会使操作json更容易。这大大降低了json的灵活性。。。