-- One active self profile per user; soft-delete older duplicates first. WITH ranked AS ( SELECT id, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY created_at DESC, id DESC) AS rn FROM profiles WHERE relation = 'self' AND deleted_at IS NULL ) UPDATE profiles p SET deleted_at = now(), updated_at = now() FROM ranked r WHERE p.id = r.id AND r.rn > 1 AND p.deleted_at IS NULL; CREATE UNIQUE INDEX IF NOT EXISTS idx_profiles_one_self_per_user ON profiles (user_id) WHERE relation = 'self' AND deleted_at IS NULL;