Pertama dan terutama: Saya setuju dengan komentar @a_horse_with_no_name dan @dezso: Anda harus menormalkan data Anda . JSON tidak untuk itu.
Namun, jika beberapa alasan saya tidak dapat mengerti benar-benar membuat ini menjadi keuntungan, itu mungkin:
Buat ekspresi berdasarkanUNIQUE INDEX
:
CREATE UNIQUE INDEX people_data_pos_idx ON peoples( (data->>'pos') ) ;
Jika, pada titik ini, Anda mencoba memasukkan potongan data berikut ke dalam tabel Anda (dengan pos - >> yang sudah ada):
INSERT INTO peoples(data)
VALUES
('{"name": "Eve", "pos":"DBA", "age":34}') ;
Anda mendapatkan ini sebagai respons:
ERROR: duplicate key value violates unique constraint "people_data_pos_idx"
SQL state: 23505
Detail: Key ((data ->> 'pos'::text))=(DBA) already exists.
CATATAN: Saya berasumsi bahwa data.pos
akan selalu berupa string. Jika Anda ingin menggeneralisasi, Anda dapat menggunakannya ( (data->'pos') )
. Anda akan mengindeks kemudian ekspresi JSON (B) alih-alih teks. Periksa Fungsi dan Operator JSON .