Đầu tiên và quan trọng nhất: Tôi đồng ý với cả hai nhận xét của @a_horse_with_no_name và @dezso: bạn nên bình thường hóa dữ liệu của mình . JSON không dành cho điều đó.
Tuy nhiên, nếu một số lý do tôi không thể hiểu được thực sự làm cho điều này trở thành một lợi thế, thì có thể:
Tạo một biểu thức dựa trênUNIQUE INDEX
:
CREATE UNIQUE INDEX people_data_pos_idx ON peoples( (data->>'pos') ) ;
Nếu tại thời điểm này, bạn cố gắng chèn đoạn dữ liệu sau vào bảng của mình (đã có sẵn - >> pos):
INSERT INTO peoples(data)
VALUES
('{"name": "Eve", "pos":"DBA", "age":34}') ;
Bạn nhận được điều này như là một phản ứng:
ERROR: duplicate key value violates unique constraint "people_data_pos_idx"
SQL state: 23505
Detail: Key ((data ->> 'pos'::text))=(DBA) already exists.
LƯU Ý: Tôi đã giả định rằng data.pos
sẽ luôn luôn là một chuỗi. Nếu bạn muốn khái quát hóa, bạn có thể sử dụng ( (data->'pos') )
thay thế. Bạn sẽ lập chỉ mục sau đó một biểu thức JSON (B) thay vì văn bản. Kiểm tra các hàm và toán tử JSON .