如何将值推入 jsonb 列中的 key[]?

How to push value into key[] in jsonb column?

我在 Postgres table 中有这样的 jsonb 结构:{ "res": [123, 223] } 我想将值推入 res 数组。我不知道数组上有多少个值,并且 jsonb_insert 对位置进行操作,所以我尝试使用 -1 位置:

select jsonb_insert( '{"res": [123, 223]}', '{res,-1}', '333');
       jsonb_insert       
--------------------------
 {"res": [123, 333, 223]}

它不起作用。如何将新值推送到数组末尾?

我正在使用 Postgres 9.6

一个可能的解决方案是使用大得离谱的头寸:

select jsonb_insert( '{"res": [123, 223]}', '{res,1000000}', '333');
       jsonb_insert       
--------------------------
 {"res": [123, 223, 333]}

使用 -1 索引和 insert_after = true:

SELECT jsonb_insert( '{"res": [123, 456, 789, 101112]}', '{res, -1}', '333', true);

+-------------------------------------+
|jsonb_insert                         |
+-------------------------------------+
|{"res": [123, 456, 789, 101112, 333]}|
+-------------------------------------+

insert_after 的默认值是 false,这意味着虽然您的目标是最后一个元素(索引 = -1),但您最终会在倒数第二个位置插入:

SELECT jsonb_insert( '{"res": [123, 456, 789, 101112]}', '{res, -1}', '333', false);

+-------------------------------------+
|jsonb_insert                         |
+-------------------------------------+
|{"res": [123, 456, 789, 333, 101112]}|
+-------------------------------------+