Mari kita ambil beberapa contoh tabel orang, yang hanya memiliki 2 bidang: id dan data (json).
SELECT data FROM peoples ;
{"name": "Adam","pos":"DBA","age":22 }
{"name": "Alice","pos":"Security","age":33 }
{"name": "Bob","pos":"Manager","age":42 }
Saya ingin membuat batasan untuk bidang "pos", itu harus unik. Saya telah mencari di internet tentang kendala JSON tetapi tidak ada hasil.
Bagaimana saya bisa mengatasi masalah ini?
postgresql
json
unique-constraint
Chenko47
sumber
sumber
Jawaban:
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 berdasarkan
UNIQUE INDEX
:Jika, pada titik ini, Anda mencoba memasukkan potongan data berikut ke dalam tabel Anda (dengan pos - >> yang sudah ada):
Anda mendapatkan ini sebagai respons:
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 .sumber