-- Trade-In MVP — отслеживание попыток геокодинга. -- -- Проблема: geocode-missing раньше выбирал ВСЕ строки с lat IS NULL. Адреса, -- которые Nominatim не может распознать (~12%), выбирались на каждом прогоне -- → бесконечный ретрай + cron-таймаут. -- -- Решение: колонка geocode_tried_at. После КАЖДОЙ попытки (успех или провал) -- ставим NOW(). geocode-missing выбирает только не-пробованные ИЛИ -- пробованные >7 дней назад. Failed-адреса ретраятся раз в неделю, не каждый cron. -- -- Идемпотентно (ADD COLUMN IF NOT EXISTS) — безопасно при каждом деплое. ALTER TABLE listings ADD COLUMN IF NOT EXISTS geocode_tried_at timestamptz; ALTER TABLE deals ADD COLUMN IF NOT EXISTS geocode_tried_at timestamptz; -- Частичные индексы: ускоряют выборку «что ещё геокодить». CREATE INDEX IF NOT EXISTS listings_geocode_pending_idx ON listings (geocode_tried_at NULLS FIRST) WHERE lat IS NULL; CREATE INDEX IF NOT EXISTS deals_geocode_pending_idx ON deals (geocode_tried_at NULLS FIRST) WHERE lat IS NULL;