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

时间:2014-03-04 18:17:35

标签: 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": ["abc", ghi], "user_id": 328252955}
...

如果我想在第一行添加名为“name”且内容为“foo bar”的字段,我该怎么办?

感谢您的帮助。非常感谢!

1 个答案:

答案 0 :(得分:0)

总有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;