В PostgreSQL частичный индекс создаётся добавлением WHERE к CREATE INDEX:
-- Базовый синтаксис
CREATE INDEX idx_name ON table(column) WHERE condition;
-- Примеры:
CREATE INDEX idx_active_subs ON subscriptions(user_id)
WHERE status = 'active';
CREATE INDEX idx_unprocessed ON tasks(created_at)
WHERE processed_at IS NULL;
CREATE UNIQUE INDEX idx_unique_email ON users(email)
WHERE deleted_at IS NULL; -- unique только среди неудалённых
Последний пример особенно полезен — partial unique index для soft delete. Позволяет иметь несколько удалённых записей с одним email, но только одну активную.
Чтобы планировщик использовал partial index, WHERE в запросе должен включать условие индекса. Проверяй через EXPLAIN ANALYZE.