the*_*ebe 18 string postgresql select json replace
我在数据库(postgres 9.2.1)中有一个文本字段,其中包含一个json blob.它看起来与此类似,除了所有在一行上,显然:
{
  "keyword": {
    "checked": "1",
    "label": "Keyword"
  },
  "agency_name": {
    "checked": "0",
    "label": "Agency Name"
  }
}
我需要向json数组添加一个元素,使它看起来像这样:
{
  "keyword": {
    "checked": "1",
    "label": "Keyword"
  },
  "something_new": {
    "checked": "1",
    "label": "Something New"
  },
  "agency_name": {
    "checked": "0",
    "label": "Agency Name"
  }
}
我并不关心新数组元素的位置.它可以在agency_name之后.在postgres中有一个简单的方法吗?
New*_*Bee 15
如果升级到PG9.5.1,那么可以使用sql操作||来合并jsonb,例如
select '{"a":1}'::jsonb || '{"a":2, "b":2}'::jsonb
将返回 {"a": 2, "b": 2}
如果你不能升级到pg9.5.1,恕我直言,在你的代码中完成工作将是一个更好的选择.您可以将旧的jsonb字符串解析为映射,然后更新映射,然后转换为字符串并更新db-record.
即使我遇到同样的问题,我也想动态地将新元素附加到jsonb [].
假设column_jsonb [] = [{"name":"xyz","age":"12"}]
UPDATE table_name
   SET column_jsonb[] = array_append(column_jsonb[],'{"name":"abc","age":"22"}');
结果:[{"name":"xyz","age":"12"},{"name":"abc","age":"22"}]
小智 6
用于||合并jsonb并将其值设置为
例:
起源:
在表中a:
id | 信息
1 | {“ aa”:“ bb”}
2 | {“ aa”:“ cc”}
执行后:
update a set info = info::jsonb || ('{"id":}' || id || '}' )::jsonb 
产生:
id | 信息
1 | {“ aa”:“ bb”,“ id”:1}
2 | {“ aa”:“ cc”,“ id”:2}
something_else:
- ‘key’删除jsonb中的元素PostgreSQL还没有很多JSON支持函数:我只能看到它们array_to_json,如果有一种相应的方法可以将原始JSON转换为数组,那么可以使用它,然后你可以操作添加额外的转换回JSON之前的元素.
可能最好的事情是使用PL语言来操纵JSON.一个显而易见的是PLV8,它在PostgreSQL中提供JavaScript编程功能.您将在JavaScript中编写一个用户定义的函数,该函数将相应地操作JSON blob:
当然,许多其他PL语言(如Java,Python或Perl)在处理JSON数据方面也同样出色,并且可能更容易在您的系统上安装.如果设置了用户定义的函数,则可以在每个函数中编写这些函数.