Tengo tal estructura jsonb en la tabla de Postgres: { "res": [123, 223] } y quiero insertar valores en res -array. No sé cuántos valores hay en la matriz y como jsonb_insert opera en la posición, probé con la posición -1 :
select jsonb_insert( '{"res": [123, 223]}', '{res,-1}', '333'); jsonb_insert -------------------------- {"res": [123, 333, 223]}No funciona. ¿Cómo empujar nuevos valores al final de la matriz?
Estoy usando Postgres 9.6
Use el índice -1 junto con insert_after = true :
SELECT jsonb_insert( '{"res": [123, 456, 789, 101112]}', '{res, -1}', '333', true); +-------------------------------------+ |jsonb_insert | +-------------------------------------+ |{"res": [123, 456, 789, 101112, 333]}| +-------------------------------------+ El valor predeterminado de insert_after es false , lo que significa que, aunque apunta al último elemento (índice = -1), termina insertando en la penúltima posición:
SELECT jsonb_insert( '{"res": [123, 456, 789, 101112]}', '{res, -1}', '333', false); +-------------------------------------+ |jsonb_insert | +-------------------------------------+ |{"res": [123, 456, 789, 333, 101112]}| +-------------------------------------+Una posible solución es usar una posición ridículamente grande:
select jsonb_insert( '{"res": [123, 223]}', '{res,1000000}', '333'); jsonb_insert -------------------------- {"res": [123, 223, 333]}