假设我有一张表格。
我希望创建一个函数,该函数接受一个字符串数组。如果在JSON中找到了一个字符串,则应将其值+1-如果没有找到,则应将其添加并设置值= 1。
我创建了一个函数桩,它看起来像这样:
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 版本。