Apakah mungkin untuk memiliki batasan kolom unik khusus sebagai berikut? Misalkan saya memiliki dua cols, subset
dan type
, kedua string (meskipun tipe data mungkin tidak masalah).
Jika type
"benar", maka saya ingin kombinasi type
dan subset
menjadi unik. Kalau tidak, tidak ada kendala. Saya menggunakan PostgreSQL 8.4 di Debian.
postgresql
index
constraint
unique-constraint
postgresql-8.4
Faheem Mitha
sumber
sumber
Jawaban:
Dengan kata lain, Anda ingin
subset
menjadi unik jikatype = 'true'
.Sebuah indeks yang unik parsial akan melakukannya:
Dengan cara ini Anda bahkan dapat membuat kombinasi dengan
NULL
unik, yang tidak mungkin sebaliknya - seperti yang dijabarkan dalam jawaban terkait ini:PostgreSQL batasan unik multi-kolom dan nilai NULL
sumber
Ini adalah tambahan untuk jawaban Erwin di atas, tetapi PostgreSQL mendukung banyak jenis indeks. Ini umumnya tidak saling eksklusif. Anda dapat menganggap ini sebagai:
Ini semua dapat digabungkan dengan berbagai cara. Semua yang Anda lakukan di sini adalah menggunakan fitur unik dan parsial, sehingga memberi Anda sebagian indeks unik (yang sangat berguna saat Anda mengetahuinya.
Tapi misalkan Anda ingin memiliki indeks case sensitif pada bidang bagian di mana jenisnya benar. Maka Anda akan menambahkan definisi fungsional:
Catatan ini membuat indeks unik pada output dari fungsi lower () yang dipanggil pada atribut subset di mana tipenya benar.
sumber