PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come eseguire il push di un oggetto JSON in un array nidificato in una colonna JSONB

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à.