Il trucco per jsonb_set()
è che modifica parte di un jsonb
oggetto, ma restituisce l'intero oggetto. Quindi gli passi il valore corrente della colonna e il percorso che vuoi modificare ("pagine" qui, come un array di stringhe), quindi prendi l'array esistente (my_column->'pages'
) e aggiungi ||
il nuovo oggetto ad esso. Tutte le altre parti di jsonb
l'oggetto rimane com'era. Stai effettivamente assegnando un oggetto completamente nuovo alla colonna, ma ciò è irrilevante perché un UPDATE
scrive comunque una nuova riga nella tabella fisica.
UPDATE my_table
SET my_column = jsonb_set(my_column, '{pages}', my_column->'pages' || new_json, true);
Il create_missing
facoltativo parametro impostato su true
qui aggiunge l'oggetto "pagine" se non esiste già.