Prenons quelques exemples de peuples de table, qui n'ont que 2 champs: id et data (json).
SELECT data FROM peoples ;
{"name": "Adam","pos":"DBA","age":22 }
{"name": "Alice","pos":"Security","age":33 }
{"name": "Bob","pos":"Manager","age":42 }
Je veux créer une contrainte pour le champ "pos", qui doit être unique. J'ai cherché sur Internet sur les contraintes JSON mais aucun résultat.
Comment gérer ce problème?
postgresql
json
unique-constraint
Chenko47
la source
la source
Réponses:
Tout d'abord: je suis d'accord avec les commentaires de @a_horse_with_no_name et @dezso: vous devez normaliser vos données . JSON n'est pas pour ça.
Cependant, si une raison que je ne peux pas comprendre en fait vraiment un avantage, il est possible:
Créez une expression basée sur
UNIQUE INDEX
:Si, à ce stade, vous essayez d'insérer les données suivantes dans votre table (avec un - >> pos déjà existant):
Vous obtenez ceci en réponse:
REMARQUE: j'ai supposé que ce
data.pos
sera toujours une chaîne. Si vous souhaitez généraliser, vous pouvez utiliser à la( (data->'pos') )
place. Vous indexeriez alors une expression JSON (B) au lieu d'un texte. Vérifiez les fonctions et opérateurs JSON .la source