-- Convert composite (port_id, archived_at) archived indexes to partial
-- indexes WHERE archived_at IS NULL. Every list query in the codebase that
-- hits archived_at filters on `archived_at IS NULL` (verified in
-- clients.service / interests.service / search.service / residential.service
-- / yachts.service). The composite index always carries the archived rows
-- as dead weight; the partial index is smaller, has a higher cache hit rate,
-- and lets the planner skip the index entirely when the predicate is absent.

-- clients
DROP INDEX IF EXISTS "idx_clients_archived";
CREATE INDEX IF NOT EXISTS "idx_clients_archived" ON "clients" ("port_id")
  WHERE "archived_at" IS NULL;

-- interests
DROP INDEX IF EXISTS "idx_interests_archived";
CREATE INDEX IF NOT EXISTS "idx_interests_archived" ON "interests" ("port_id")
  WHERE "archived_at" IS NULL;

-- yachts
DROP INDEX IF EXISTS "idx_yachts_archived";
CREATE INDEX IF NOT EXISTS "idx_yachts_archived" ON "yachts" ("port_id")
  WHERE "archived_at" IS NULL;

-- residential clients
DROP INDEX IF EXISTS "idx_residential_clients_archived";
CREATE INDEX IF NOT EXISTS "idx_residential_clients_archived" ON "residential_clients" ("port_id")
  WHERE "archived_at" IS NULL;

-- residential interests
DROP INDEX IF EXISTS "idx_residential_interests_archived";
CREATE INDEX IF NOT EXISTS "idx_residential_interests_archived" ON "residential_interests" ("port_id")
  WHERE "archived_at" IS NULL;
