我有一个表,该表具有一列jsonb类型的列,该表存储一个带有数组作为值的键,我想向该数组添加一个新条目,这是我遇到的麻烦。
我已经写了一些存储的proc,但是值没有得到更新。
表名:config
列:ID,名称,cfg_val
DB中cfg_value = {“” tools_config“:[{” test“:1}]}的当前条目
CREATE OR REPLACE FUNCTION addConfig(id varchar, name varchar,
jsonValues jsonb ) RETURNS INTEGER AS $$
DECLARE
BEGIN
WITH UPSERT AS (UPDATE config SET (cfg_val) = ( cfg_val->'tools_config'::jsonb || jsonValues::jsonb->0)
WHERE name = name RETURNING *)
INSERT INTO config (id, name, cfg_val)
SELECT id, name, jsonValues
WHERE NOT EXISTS (SELECT 1 FROM UPSERT
WHERE UPSERT.id = id AND UPSERT.name = name);
return 0;
EXCEPTION WHEN others THEN
return 1;
END;
$$ LANGUAGE plpgsql;
如果我调用添加另一个值,则该值应附加为另一个数组元素。
例如,如果我致电:
select addConfig(1, 'name', '{"tools_config":[{"text":1}]}'::jsonb);
然后应将'{“ text”:2}'作为数组中的另一个元素添加
所以最终的数组应该看起来像
{"tools_config": [{"test": 1}, {"text": 2}]}