Saya ingin menambahkan batasan yang memberlakukan keunikan pada kolom hanya di sebagian tabel.
ALTER TABLE stop ADD CONSTRAINT myc UNIQUE (col_a) WHERE (col_b is null);
Bagian di WHERE
atas adalah angan-angan.
Ada cara untuk melakukan ini? Atau haruskah saya kembali ke papan gambar relasional?
postgresql
constraints
unique-constraint
EoghanM
sumber
sumber
Jawaban:
PostgreSQL tidak mendefinisikan batasan parsial (yaitu bersyarat)
UNIQUE
- namun, Anda dapat membuat indeks unik parsial . PostgreSQL menggunakan indeks unik untuk menerapkan batasan unik, jadi efeknya sama, Anda tidak akan melihat batasan yang tercantum diinformation_schema
.Lihat indeks parsial .
sumber
ERROR: duplicate key value violates unique constraint "stop_myc"
telah dikatakan bahwa PG tidak mendefinisikan batasan UNIK parsial (yaitu bersyarat). Dokumentasi juga mengatakan bahwa cara yang disukai untuk menambahkan batasan unik ke tabel adalah
ADD CONSTRAINT
Indeks UnikAda cara untuk mengimplementasikannya menggunakan Exclusion Constraints , (terima kasih @dukelion untuk solusi ini)
Dalam kasus Anda, itu akan terlihat seperti
sumber