arrays postgresql jsonb postgresql-9.5 array-push

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;