簡體   English   中英

修改postgres中的JSONB字段

[英]Modify JSONB fields inside postgres

假設我有一張桌子

CREATE TABLE test (id integer NOT NULL, categories jsonb)

我在那里有以下元素:

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

我想創建函數,它接受一個字符串數組。 如果在JSON中找到了一個字符串,那么它應該+1它的值 - 如果沒有,它應該添加值為value = 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}

如果有人能幫助我完成這項功能,我將非常感激。

PS:我正在使用Postgres 9.4,直到它獲得穩定版本才能使用9.5。

有一個jsonbx擴展,它將一些json(b)函數和運算符從9.5擴展到9.4(特別是你感興趣的jsonb_set)。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM