Трикът за jsonb_set()
е, че модифицира част от jsonb
обект, но връща целия обект. Така че му подавате текущата стойност на колоната и пътя, който искате да промените („страници“ тук, като низов масив), след което взимате съществуващия масив (my_column->'pages'
) и добавете ||
новия обект към него. Всички други части на jsonb
обектът остава такъв, какъвто е бил. Вие ефективно присвоявате напълно нов обект на колоната, но това е без значение, защото UPDATE
така или иначе записва нов ред във физическата таблица.
UPDATE my_table
SET my_column = jsonb_set(my_column, '{pages}', my_column->'pages' || new_json, true);
Незадължителният create_missing
параметърът е зададен на true
тук добавя обекта "страници", ако все още не съществува.