Vamos dar um exemplo de povos da tabela, que possuem apenas 2 campos: id e data (json).
SELECT data FROM peoples ;
{"name": "Adam","pos":"DBA","age":22 }
{"name": "Alice","pos":"Security","age":33 }
{"name": "Bob","pos":"Manager","age":42 }
Quero criar restrição para o campo "pos", que deve ser exclusivo. Pesquisei na Internet sobre restrições de JSON, mas nenhum resultado.
Como posso lidar com esse problema?
postgresql
json
unique-constraint
Chenko47
fonte
fonte
Respostas:
Em primeiro lugar: concordo com os comentários de @a_horse_with_no_name e @dezso: você deve normalizar seus dados . JSON não é para isso.
No entanto, se alguma razão pela qual eu não consigo entender realmente faz disso uma vantagem, é possível:
Crie uma expressão baseada
UNIQUE INDEX
:Se, nesse momento, você tentar inserir os seguintes dados em sua tabela (com um já existente - >> pos):
Você obtém isso como resposta:
NOTA: Presumi que
data.pos
sempre será uma string. Se você deseja generalizar, pode usar( (data->'pos') )
. Você indexaria então uma expressão JSON (B) em vez de um texto. Verifique as funções e operadores JSON .fonte