Большинство реализуют это проверками в коде,
SELECT перед INSERT, транзакциями или триггерами. PostgreSQL умеет делать это на уровне индекса:INSERT INTO users (email) VALUES ('a@b.com');Сработает, если активного пользователя с таким email ещё нет:
UPDATE users SET deleted_at = now() WHERE email = 'a@b.com';
Теперь email снова можно использовать для активных, без физического удаления строк.
🔥
Partial UNIQUE index — отличный способ фиксировать правила прямо в PostgreSQL.➡️ SQL Ready | #совет
