我有一个JSONB商店。
requests: {
"0000": ["1111"],
"1111": ["2222"]
}
当我的初始值为:
时,我可以添加到商店中UPDATE users SET requests = jsonb_insert(requests::jsonb, '{2222}', $$["3333"]$$);
但是,如果我需要附加到数组,它就像我试图替换值并抛出:
UPDATE users SET requests = jsonb_insert(requests::jsonb, '{0000}', $$["4444"]$$);
ERROR: cannot replace existing key
HINT: Try using the function jsonb_set to replace key value.
所需的输出将是:
requests: {
"0000": ["1111", "4444"],
"1111": ["2222"]
}
似乎我错过了一个简单的array_append
或其他东西,但无法解决这个问题。
答案 0 :(得分:3)
我不确定你的结构,但有这样的:
create table users (requests jsonb);
您的路径中缺少数组索引:
t=# select * from users ;
requests
--------------------
{"0000": ["1111"]}
{"1111": ["2222"]}
(2 rows)
Time: 0.257 ms
t=# UPDATE users SET requests = jsonb_insert(requests::jsonb, '{0000,1}', '"4444"');
UPDATE 2
Time: 7.552 ms
t=# select * from users ;
requests
----------------------------
{"0000": ["1111", "4444"]}
{"1111": ["2222"]}
(2 rows)