Unieke indexen in Postgres zijn gebaseerd op waarden die gelijk zijn , maar NULL is nooit gelijk aan iets, inclusief andere NULL's. Daarom is elke rij met een waarde NULL delete_at verschillend van elke andere mogelijke rij - dus u kunt er een willekeurig aantal invoegen.
Een manier om dit te omzeilen is het maken van gedeeltelijke indexen , verschillende regels toepassen op rijen met en zonder NULL's:
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;