Estoy enfrentando un problema con respecto al uso del tipo de datos JSON en PostgreSQL. Intento lograr almacenar un modelo Java desnormalizado en la base de datos. El modelo presenta listas de objetos complejos. Por lo tanto, decidí modelarlos como JSON en matrices PostgreSQL nativas.
Este es un fragmento despojado de mi declaración de creación de tabla:
CREATE TABLE test.persons
(
id UUID,
firstName TEXT,
lastName TEXT,
communicationData JSON[],
CONSTRAINT pk_person PRIMARY KEY (id)
);
Como puede ver, es una persona que presenta una lista de objetos de datos de comunicación en JSON. Uno de esos objetos podría verse así:
{"value" : "03334/254147", "typeId" : "ea4e7d7e-7b87-4628-ba50-6a5f6e63dbf6"}
Puedo agregar fácilmente un objeto JSON a una matriz usando el array_append de PostgreSQL. Sin embargo, no puedo eliminar un valor conocido de la matriz. Considere fe esta declaración SQL:
UPDATE test.persons
SET communicationData = array_remove(
communicationData,
'{"value" : "03334/254147", "typeId" : "ea4e7d7e-7b87-4628-ba50-6a5f6e63dbf6"}'::JSON
)
WHERE id = 'f671eb6a-d603-11e3-bf6f-07ba007d953d';
Esto falla con ERROR: could not identify an equality operator for type json
. ¿Tiene alguna pista de cómo podría eliminar un valor conocido de la matriz JSON? También sería posible eliminar por posición en la matriz, ya que sé que también ...
La versión de PostgreSQL es 9.3.4.
fuente
jsonb
. Espero que te encante. Se agregó un capítulo con enlaces.