无法更新jsonb对象中的数组元素

时间:2019-04-09 12:08:12

标签: postgresql

我有一个表,该表具有一列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}]}

0 个答案:

没有答案