Jedinečné indexy v Postgresu jsou založeny na rovných hodnotách , ale NULL se nikdy nerovná ničemu, včetně jiných hodnot NULL. Každý řádek s hodnotou NULL delete_at je tedy odlišný od jakéhokoli jiného možného řádku – takže jich můžete vložit libovolný počet.
Jedním ze způsobů, jak to obejít, je vytvořit částečné indexy , použití různých pravidel na řádky s hodnotami NULL a bez nich:
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;