-- 177_deals_city_region.sql -- deals.city + region_code backfill — расширение Mera trade-in estimator с -- Екатеринбурга на ВСЮ Свердловскую область (region_code=66, все города). -- -- WHY: -- Ночной import_rosreestr_dkp (scheduler.py, source='rosreestr_dkp_import') -- до сих пор фильтровал `city ILIKE '%катеринбург%'` и хардкодил -- 'Екатеринбург, ' в address, а deals.region_code никогда не заполнялся -- (NULL на всех 49791 текущих строках). Foreign table -- gendesign_rosreestr_deals уже отдаёт чистые city + region_code из -- source-таблицы (migration 072) — снятие фильтра открывает +47183 -- не-ЕКБ сделок, уже сидящих в источнике. -- -- WHAT: -- - deals.region_code уже существует (002_core_tables.sql), но deals.city -- отсутствовал (было только текстовое поле address с хардкод-префиксом -- 'Екатеринбург, '). Добавляем city text — импортёр (scheduler.py, -- тот же PR) теперь заполняет его из реального source.city. -- - Индекс (city, deal_date) — под будущие per-city аналитические запросы -- (аналог deals_source_idx для (source, deal_date)). -- - Backfill существующих 49791 строк: все текущие deals с source='rosreestr' -- импортированы ДО этой миграции старым EKB-only кодом, т.е. фактически -- все они — Екатеринбург (то же допущение, что зашито в address -- 'Екатеринбург, ' + street). Простановка region_code=66, city='Екатеринбург' -- задним числом делает старые строки self-describing наравне с новыми. -- -- SCOPE: только schema (city column + index) + backfill старых rosreestr-строк. -- Новые импорты (после деплоя scheduler.py) заполняют оба поля сами. -- -- IDEMPOTENCY / SAFETY: -- - ADD COLUMN IF NOT EXISTS / CREATE INDEX IF NOT EXISTS — безопасный re-run. -- - Backfill UPDATE ограничен `region_code IS NULL OR city IS NULL` — -- повторный прогон no-op (после первого раза условие уже false). -- -- Dependencies: 002_core_tables.sql (deals, deals.region_code) BEGIN; ALTER TABLE deals ADD COLUMN IF NOT EXISTS city text; CREATE INDEX IF NOT EXISTS deals_city_deal_date_idx ON deals (city, deal_date); -- Backfill: все существующие rosreestr-сделки импортированы старым EKB-only -- кодом (до этой миграции) => гарантированно Екатеринбург, region_code=66. UPDATE deals SET region_code = 66, city = 'Екатеринбург' WHERE source = 'rosreestr' AND (region_code IS NULL OR city IS NULL); COMMIT;