El truco para jsonb_set()
es que modifica parte de un jsonb
objeto, pero devuelve el objeto completo. Entonces, le pasa el valor actual de la columna y la ruta que desea modificar ("páginas" aquí, como una matriz de cadenas), luego toma la matriz existente (my_column->'pages'
) y agregue ||
el nuevo objeto. Todas las demás partes del jsonb
objeto permanecen como estaban. Está asignando efectivamente un objeto completamente nuevo a la columna, pero eso es irrelevante porque UPDATE
escribe una nueva fila en la tabla física de todos modos.
UPDATE my_table
SET my_column = jsonb_set(my_column, '{pages}', my_column->'pages' || new_json, true);
El create_missing
opcional parámetro establecido en true
aquí agrega el objeto "páginas" si aún no existe.