В PostgreSQL существует возможность создавать частичные индексы (partial indexes). Частичные индексы — это такие индексы, которые охватывают не все записи, а только записи, удовлетворяющие определённому условию.
Частичные индексы могут быть уникальными (partial unique index), что особенно полезно при использовании «мягкого» удаления, когда вы не удаляете записи физически, а только помечаете их как удалённые, так как в этом случае нужно, чтобы ограничения уникальности у этих индексов не распространялось на удалённые записи.
Пример частичного индекса:
1 2 |
CREATE INDEX idx_access_log_client_ip ON access_log (client_ip) WHERE NOT (client_ip > inet '192.168.100.0' AND client_ip < inet '192.168.100.255'); |
Пример частичного индекса с ограничением уникальности или уникального частичного индекса, как там правильно:
1 2 |
CREATE UNIQUE INDEX udx_customer_not_deleted_email ON customer (email) WHERE NOT removed; |