PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So verschieben Sie ein JSON-Objekt in ein verschachteltes Array in einer JSONB-Spalte

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.