arrays - Agregar(insertar) y eliminar de una matriz JSON en PostgreSQL 9.5+
jsonb postgresql-9.5 (2)
Para versiones inferiores a 9.5 ver esta pregunta.
He creado una tabla en PostgreSQL usando esto:
CREATE TEMP TABLE jsontesting
AS
SELECT id, jsondata::jsonb FROM ( VALUES
(1, ''["abra","value","mango", "apple", "sample"]''),
(2, ''["japan","china","india", "russia", "australia"]''),
(3, ''["must", "match"]''),
(4, ''["abra","value","true", "apple", "sample"]''),
(5, ''["abra","false","mango", "apple", "sample"]''),
(6, ''["string","value","mango", "apple", "sample"]''),
(7, ''["must", "watch"]'')
) AS t(id,jsondata);
Ahora lo que quería era
add Algo como append_to_json_array toma el jsondata real que es un json-array y el newString que debo agregar a ese jsondata array y esta función debería devolver el json-array actualizado.
UPDATE jsontesting SET jsondata=append_to_json_array(jsondata, ''newString'') WHERE id = 7;
elimine un valor de la matriz de datos json, una función para eliminar el valor.
Intenté buscar documentación de PostgreSQL pero no encontré nada allí.
Para agregar a la respuesta de Evan Carroll, es posible que desee hacer lo siguiente para establecer la columna en una matriz vacía si es NULL
. El operador de adición ( ||
) no hace nada si la columna es actualmente NULL
.
UPDATE jsontesting SET jsondata = (
CASE
WHEN jsondata IS NULL THEN ''[]''::JSONB
ELSE jsondata
END
) || ''["newString"]''::JSONB WHERE id = 7;
Para agregar el valor, use la matriz JSON agregar apperador ( ||
)
UPDATE jsontesting
SET jsondata = jsondata || ''["newString"]''::jsonb
WHERE id = 7;
Eliminar el valor se ve así
UPDATE jsontesting
SET jsondata = jsondata - "newString"
WHERE id = 7;
La concatenación a un campo anidado se ve así.
UPDATE jsontesting
SET jsondata = jsonb_set(
jsondata::jsonb,
array[''nestedfield''],
(jsondata->''nestedfield'')::jsonb || ''["newString"]''::jsonb)
WHERE id = 7;