Indeks unik di Postgres didasarkan pada nilai yang sama , tetapi NULL tidak pernah sama dengan apa pun, termasuk NULL lainnya. Oleh karena itu, setiap baris dengan nilai NULL dihapus_at berbeda dari baris lain yang memungkinkan - sehingga Anda dapat memasukkan berapa pun jumlahnya.
Salah satu caranya adalah dengan membuat indeks parsial , menerapkan aturan berbeda ke baris dengan dan tanpa NULL:
CREATE UNIQUE INDEX ... ON subscriptions
(user_id, class_type_id) WHERE deleted_at IS NULL;
CREATE UNIQUE INDEX ... ON subscriptions
(user_id, class_type_id, deleted_at) WHERE deleted_at IS NOT NULL;