Je suis confronté à un problème concernant l'utilisation du type de données JSON dans PostgreSQL. J'essaie de réaliser le stockage d'un modèle Java dénormalisé dans la base de données. Le modèle comporte des listes d'objets complexes. J'ai donc décidé de les modéliser en JSON dans des tableaux natifs PostgreSQL.
Voici un extrait de ma déclaration de création de table:
CREATE TABLE test.persons
(
id UUID,
firstName TEXT,
lastName TEXT,
communicationData JSON[],
CONSTRAINT pk_person PRIMARY KEY (id)
);
Comme vous pouvez le voir, il s'agit d'une personne présentant une liste d'objets de données de communication en JSON. L'un de ces objets pourrait ressembler à ceci:
{"value" : "03334/254147", "typeId" : "ea4e7d7e-7b87-4628-ba50-6a5f6e63dbf6"}
Je peux facilement ajouter un tel objet JSON à un tableau en utilisant array_append de PostgreSQL. Cependant, je ne parviens pas à supprimer une valeur connue du tableau. Considérez par exemple cette instruction 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';
Cela échoue avec ERROR: could not identify an equality operator for type json
. Avez-vous un indice sur la façon de supprimer une valeur connue du tableau JSON? Il serait également possible de supprimer par position dans le tableau, car je sais que l'on aussi ...
La version de PostgreSQL est 9.3.4.
jsonb
. Je suppose que vous allez l'adorer. Ajout d'un chapitre avec des liens.