Tomemos algunos ejemplos de pueblos de tabla, que obtuvieron solo 2 campos: id y data (json).
SELECT data FROM peoples ;
{"name": "Adam","pos":"DBA","age":22 }
{"name": "Alice","pos":"Security","age":33 }
{"name": "Bob","pos":"Manager","age":42 }
Quiero crear una restricción para el campo "pos", que debe ser único. He buscado en Internet sobre las restricciones de JSON, pero no hay resultados.
¿Cómo puedo manejar este problema?
postgresql
json
unique-constraint
Chenko47
fuente
fuente
Respuestas:
Primero y principal: estoy de acuerdo con los comentarios de @a_horse_with_no_name y @dezso: debe normalizar sus datos . JSON no es para eso.
Sin embargo, si alguna razón por la que no puedo entender realmente hace de esto una ventaja, es posible:
Crear una expresión basada
UNIQUE INDEX
:Si, en este punto, intenta insertar el siguiente dato en su tabla (con una ya existente - >> pos):
Obtienes esto como respuesta:
NOTA: Supuse que
data.pos
siempre será una cadena. Si desea generalizar, puede usar( (data->'pos') )
en su lugar. Luego indexaría una expresión JSON (B) en lugar de un texto. Verifique las funciones y operadores de JSON .fuente