Это не идеально, но если у вас есть проверка на поле, вы можете внести изменение, которое сделает значение недействительным. Например, недопустимые символы или отрицательные числа. Вы можете внести это изменение при мягком удалении, и вы знаете, что оно не будет конфликтовать с допустимым значением. Вам также нужно следить за тем, чтобы мягкие удаленные значения не конфликтовали друг с другом.
В одном случае у меня был столбец электронной почты с уникальным ограничением и целочисленным идентификатором автоинкремента для каждой строки. При мягком удалении я добавил «id @», где id был уникальным идентификатором строки перед реальным электронным письмом. @
не допускается в электронных письмах, если они не указаны в кавычках, поэтому я знаю, что ни одно действительное письмо не будет конфликтовать с новым значением, и поэтому оно никогда не будет конфликтовать с действительным письмом. Уникальный целочисленный идентификатор также гарантирует, что каждая удаленная строка будет уникальной, даже если один и тот же адрес электронной почты будет удален несколько раз.
Я знаю, что это не идеально, но это простой способ обойти эту проблему.
ПРИМЕЧАНИЕ: упомянутое мной изменение добавляет символы в уникальное поле, поэтому мне пришлось делать дополнительные трюки, если текущее значение уже находится на максимальной длине или близко к ней. Они относятся к конкретному приложению, поэтому не стоит здесь упоминать, но имейте в виду и примите решение этой проблемы, и это простой способ обойти пропущенную функцию частичного индекса.
is_active = TRUE
(или имеет только один столбец, PK ofdir_events
).