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 baseadaUNIQUE INDEX
:
CREATE UNIQUE INDEX people_data_pos_idx ON peoples( (data->>'pos') ) ;
Se, nesse momento, você tentar inserir os seguintes dados em sua tabela (com um já existente - >> pos):
INSERT INTO peoples(data)
VALUES
('{"name": "Eve", "pos":"DBA", "age":34}') ;
Você obtém isso como resposta:
ERROR: duplicate key value violates unique constraint "people_data_pos_idx"
SQL state: 23505
Detail: Key ((data ->> 'pos'::text))=(DBA) already exists.
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 .