Ich habe ein Problem mit der Verwendung des JSON-Datentyps in PostgreSQL. Ich versuche, ein in der DB denormalisiertes Java-Modell zu speichern. Das Modell enthält Listen komplexer Objekte. Daher habe ich beschlossen, diese als JSON in nativen PostgreSQL-Arrays zu modellieren.
Dies ist ein abgespeckter Ausschnitt meiner Anweisung zur Tabellenerstellung:
CREATE TABLE test.persons
(
id UUID,
firstName TEXT,
lastName TEXT,
communicationData JSON[],
CONSTRAINT pk_person PRIMARY KEY (id)
);
Wie Sie sehen können, handelt es sich um eine Person mit einer Liste von Kommunikationsdatenobjekten in JSON. Eines dieser Objekte könnte folgendermaßen aussehen:
{"value" : "03334/254147", "typeId" : "ea4e7d7e-7b87-4628-ba50-6a5f6e63dbf6"}
Ich kann ein solches JSON-Objekt einfach mit array_append von PostgreSQL an ein Array anhängen. Ich kann jedoch keinen bekannten Wert aus dem Array entfernen. Betrachten Sie zB diese SQL-Anweisung:
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';
Dies schlägt fehl mit ERROR: could not identify an equality operator for type json
. Haben Sie einen Hinweis, wie ich einen bekannten Wert aus dem JSON-Array entfernen kann? Es wäre auch möglich, nach Position im Array zu entfernen, da ich weiß, dass man auch ...
Die PostgreSQL-Version ist 9.3.4.