PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment pousser un objet JSON vers un tableau imbriqué dans une colonne JSONB

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