Уникалните индекси в Postgres се базират на равни стойности , но NULL никога не е равно на нищо, включително други NULL. Следователно всеки ред с NULL deleted_at стойност е различен от всеки друг възможен ред - така че можете да вмъкнете произволен брой от тях.
Един от начините за това е да създадете частични индекси , прилагайки различни правила към редове със и без 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;