Sto riscontrando un problema relativo all'uso del tipo di dati JSON in PostgreSQL. Cerco di ottenere la memorizzazione di un modello Java denormalizzato nel DB. Il modello presenta elenchi di oggetti complessi. Così, ho deciso di modellarli come JSON in array PostgreSQL nativi.
Questo è uno snippet ridotto della mia dichiarazione di creazione della tabella:
CREATE TABLE test.persons
(
id UUID,
firstName TEXT,
lastName TEXT,
communicationData JSON[],
CONSTRAINT pk_person PRIMARY KEY (id)
);
Come puoi vedere, è una persona che presenta un elenco di oggetti dati di comunicazione in JSON. Uno di questi oggetti potrebbe apparire così:
{"value" : "03334/254147", "typeId" : "ea4e7d7e-7b87-4628-ba50-6a5f6e63dbf6"}
Posso facilmente aggiungere un tale oggetto JSON a un array usando array_append di PostgreSQL. Tuttavia, non riesco a rimuovere un valore noto dall'array. Prendi in considerazione questa istruzione 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';
Questo fallisce con ERROR: could not identify an equality operator for type json
. Hai un suggerimento su come potrei rimuovere un valore noto dall'array JSON? Sarebbe anche possibile rimuovere per posizione nella matrice, poiché so che anche uno ...
La versione PostgreSQL è 9.3.4.