-- 151_clean_bare_street_aliases.sql -- -- CONTEXT: house_address_aliases — кэш матчинга листинг→дом (normalized_address → house_id). -- 6338 из 21720 (29%) алиасов — «голые улицы» БЕЗ номера дома (normalized_address вида -- «екатеринбург улица мамина сибиряка»). Любой безномерный листинг (Яндекс-SERP часто без -- номера дома) матчился в такой алиас (Tier-2b match в matching/houses.py) → сваливание -- ЧУЖИХ листингов в один дом (прод: house 131237 «Мамина-Сибиряка 126» стянул 8 разных -- Мамина-номеров + голую улицу → ложная доля). Матчер захардненен (P1, PR #2082): больше -- НЕ создаёт и НЕ матчит голые алиасы. Эта миграция удаляет УЖЕ НАКОПЛЕННЫЙ сток. -- -- WHAT: DELETE алиасов без хвостового номера дома (последний токен начинается с цифры). -- KEEP: «улица вайнера 66», «мамина сибиряка 126а», «улица 8 марта 5» (номер дома есть). -- DELETE: «улица мамина сибиряка», «улица 8 марта» (цифра в НАЗВАНИИ улицы, не номер дома). -- Регэксп идентичен Python-хелперу has_house_number ('(?:^|\s)\d\S*$', PR #2082). -- -- SAFETY / IDEMPOTENCY: house_address_aliases — РЕГЕНЕРИРУЕМЫЙ кэш матчинга; матчер -- пересоздаёт корректные (номерные) алиасы на следующем матче. DELETE НЕ трогает -- listings.house_id_fk, house_sources, houses — только кэш-таблицу алиасов. Повторный -- прогон удалит 0 (предикат стабилен). Таблица ~21.7k строк → DELETE мгновенный, без -- длинных локов. Деплой-раннер гонит файл через psql -v ON_ERROR_STOP=on БЕЗ -- --single-transaction → транзакцию открывает САМ файл (BEGIN/COMMIT ниже). -- -- DEPENDENCIES: PR #2082 (P1-гард в matching/houses.py уже в проде — голые алиасы не -- регенерируют после удаления). house_address_aliases.normalized_address (мигр. cross-source -- matching). NB нумерации: последний занятый = 150; следующий sequential = 151 -- (`ls tradein-mvp/backend/data/sql | grep '^15'` + открытые PR — дубля basename нет). -- -- Deploy order: после 150_sale_share_listing_geo_filter.sql. BEGIN; DELETE FROM house_address_aliases WHERE normalized_address !~ '(^|[[:space:]])[0-9][^[:space:]]*$'; COMMIT;