L'astuce pour jsonb_set()
c'est qu'il modifie une partie d'un jsonb
objet, mais il renvoie l'objet entier. Vous lui passez donc la valeur courante de la colonne et le chemin que vous souhaitez modifier ("pages" ici, sous forme de tableau de chaînes), puis vous prenez le tableau existant (my_column->'pages'
) et ajoutez ||
son nouvel objet. Toutes les autres parties du jsonb
l'objet reste tel qu'il était. Vous affectez effectivement un objet complètement nouveau à la colonne, mais cela n'a pas d'importance car un UPDATE
écrit quand même une nouvelle ligne dans la table physique.
UPDATE my_table
SET my_column = jsonb_set(my_column, '{pages}', my_column->'pages' || new_json, true);
Le create_missing
facultatif paramètre défini sur true
ajoute ici l'objet "pages" s'il n'existe pas déjà.