sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo insertar un objeto JSON en una matriz anidada en una columna JSONB

El truco para jsonb_set() es que modifica parte de un jsonb objeto, pero devuelve el objeto completo. Entonces, le pasa el valor actual de la columna y la ruta que desea modificar ("páginas" aquí, como una matriz de cadenas), luego toma la matriz existente (my_column->'pages' ) y agregue || el nuevo objeto. Todas las demás partes del jsonb objeto permanecen como estaban. Está asignando efectivamente un objeto completamente nuevo a la columna, pero eso es irrelevante porque UPDATE escribe una nueva fila en la tabla física de todos modos.

UPDATE my_table
SET my_column = jsonb_set(my_column, '{pages}', my_column->'pages' || new_json, true);

El create_missing opcional parámetro establecido en true aquí agrega el objeto "páginas" si aún no existe.