Postgresql: actualiza o elimina un valor de un elemento jsonb anidado
¿Hay alguna manera de eliminar/actualizar un objeto clave json anidado (no una matriz), por ejemplo, el siguiente json:
{
"top": {
"nested": {
"leaf": 1
}
}
}
¿Cómo eliminaría/actualizaría el elemento hoja?
Lo intenté
SELECT jsonb '{"top": {"nested": {"leaf" : 1}}' - '{top,nested,leaf}'
pero no hubo suerte
Aceptado
Necesitas usar el #-
operador, no -
:
SELECT jsonb '{"top": {"nested": {"leaf" : 1}}}' #- '{top,nested,leaf}';
┌─────────────────────────┐
│ ?column? │
├─────────────────────────┤
│ {"top": {"nested": {}}} │
└─────────────────────────┘
(1 row)
De la documentación :
-
(dado untext
argumento): elimine el par clave/valor o el elemento de cadena del operando izquierdo. Los pares clave/valor coinciden en función de su valor clave.-
(dado unint
argumento): elimine el elemento de la matriz con el índice especificado (los enteros negativos cuentan desde el final). Genera un error si el contenedor de nivel superior no es una matriz.#-
: elimina el campo o elemento con la ruta especificada (para matrices JSON, los enteros negativos cuentan desde el final)