Der Trick zu jsonb_set()
ist, dass es einen Teil eines jsonb
modifiziert Objekt, aber es gibt das gesamte Objekt zurück. Sie übergeben ihm also den aktuellen Wert der Spalte und den Pfad, den Sie ändern möchten ("Seiten" hier als String-Array), dann nehmen Sie das vorhandene Array (my_column->'pages'
) und hängen Sie ||
an das neue Objekt dazu. Alle anderen Teile des jsonb
Objekt bleibt wie es war. Sie weisen der Spalte effektiv ein völlig neues Objekt zu, aber das ist irrelevant, da ein UPDATE
schreibt trotzdem eine neue Zeile in die physische Tabelle.
UPDATE my_table
SET my_column = jsonb_set(my_column, '{pages}', my_column->'pages' || new_json, true);
Das optionale create_missing
Parameter auf true
gesetzt fügt hier das "pages"-Objekt hinzu, falls es noch nicht existiert.