[英]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)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.