在PostgreSQL中修改JSONB字段

3
假设我有一张表格。
CREATE TABLE test (id integer NOT NULL, categories jsonb)

我有以下元素:

insert into test (categories) values ('{"foo": 1, "bar": 5}');

我希望创建一个函数,该函数接受一个字符串数组。如果在JSON中找到了一个字符串,则应将其值+1-如果没有找到,则应将其添加并设置值= 1。
我创建了一个函数桩,它看起来像这样:
CREATE OR REPLACE FUNCTION update_json(varchar[]) RETURNS void AS $$
DECLARE
  key varchar;
  my_json jsonb := '{"foo": 5, "baz": 10}'::jsonb; -- for testing purposes, I am using static json here.
BEGIN
  -- FINISH FOLLOWING LOOP
  FOREACH key IN ARRAY $1 LOOP
    IF my_json->key IS NULL THEN
      RAISE NOTICE 'json = %', my_json->key;
      my_json->key := 1;
    ELSE
      my_json->key += 1;
    END IF;
  END LOOP;

  RAISE NOTICE 'json = %', my_json;
  -- UPDATE test SET categories = my_json WHERE id = 1;
END;
$$ LANGUAGE plpgsql;


SELECT update_json(ARRAY['foo', 'bar']);

我希望最终的 my_json 变成这样:{"foo": 2, "bar": 1, "baz": 10}

如果有人能帮我让这个函数正常工作,我将不胜感激。

附注:我正在使用 Postgres 9.4 版本,由于尚未稳定,因此无法使用 9.5 版本。


可以使用简单的SQL,从PostgreSQL 9.3+开始实现(我很快会更新那个答案,提到新的9.5功能)。 - pozs
1个回答

0

有一个jsonbx扩展,它将一些9.5版本中的json(b)函数和运算符回溯到9.4版本(特别是您感兴趣的jsonb_set函数)。

请查看:http://www.pgxn.org/dist/jsonbx/1.0.0/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接