如何将给定的密钥附加到PostgreSQL JSONB数组中



我有一个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或其他东西,但无法弄清楚。

我不确定你的结构,但这样:

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)

最新更新