-- 108_clean_avito_addresses_v2.sql -- #1419 — повторный backfill очистки listings.address (Avito) на СУЩЕСТВУЮЩЕМ проде. -- -- ПОЧЕМУ ОТДЕЛЬНАЯ МИГРАЦИЯ. Правка regexp в 062_clean_avito_addresses.sql НЕ долетает -- до прода: 062 уже в _schema_migrations → на деплое пропускается, ранее накопленные -- «грязные» адреса (хвост «Площадь NN.N м²», «от N мин.») остаются. Эта миграция -- прогоняет улучшенный UPDATE на живой таблице (062 — для fresh-install). -- -- ЧТО ЧИНИТ. Старый паттерн `Площадь \d` отрезал только до первой цифры площади и -- не покрывал десятичные/единицы → хвост «Площадь 45.3 м²» оставался в адресе. Новый -- паттерн `Площадь \d+(\.\d+)?\s?(м²|м2|кв\.?\s?м)` срезает полностью. -- Idempotent: regexp_replace на уже-чистой строке — no-op; WHERE отбирает только -- ещё-грязные строки. Под gate _schema_migrations (ровно один раз). -- Apply after: 107_scrape_schedules_seed_cian_city_sweep.sql BEGIN; UPDATE listings SET address = trim(both ' ,.' FROM regexp_replace( regexp_replace(address, '\.?css-[a-z0-9_-]+\s*\{[^}]*\}', '', 'gi'), '\s*(Площадь \d+(\.\d+)?\s?(м²|м2|кв\.?\s?м)|от \d+\s?мин\.|css-[a-z0-9_-]+).*$', '', 'i' )) WHERE source = 'avito' AND (address ~* 'css-[a-z0-9_-]+' OR address ~* 'Площадь \d+(\.\d+)?\s?(м²|м2|кв\.?\s?м)|от \d+\s?мин\.'); COMMIT;