如何将给定键附加到PostgreSQL JSONB数组?

时间:2017-06-11 18:24:08

标签: json 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或其他东西,但无法解决这个问题。

1 个答案:

答案 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)