gendesign/_wt-cadval/data/sql/169_obj_class_fallback.sql
bot-backend 542ff1c9ca docs(tradein/domclick): два комментария описывали пул, которого нет с миграции 253
Оба места утверждали, что у Домклика один выделенный резидентный прокси и
пула нет. Это перестало быть правдой ещё в #2800 (миграция 253 сняла
резервацию узла), но текст остался — и именно на него опирался тикет #3189,
поставленный под «калибровку» ограничения, которого не существует.
Свип к тому же ходит через пул давно (serp.py:359), а бэкфилл подключён к
нему в PR #3222.

Заодно докстринг называл не тот ограничитель: свип кладёт не счётчик
провалов lease, а break по первому DomClickBlockedError (#2854) — до
ротации дело не доходит ни при каком счётчике, отсюда buckets_completed=0.

Только комментарии, поведение не меняется. Миграция 175 уже применена, а
_schema_migrations трекает по имени файла без checksum — правка текста
её не перезапустит.
2026-08-29 18:57:25 +03:00

50 lines
3.2 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 169_obj_class_fallback.sql
--
-- Контекст (issue #38 — Demand D6): kn-API не отдаёт obj_class для ~3032 ЖК
-- Свердл (Bug_Kn_API_Obj_Class_Always_Null). Это ломает per-class velocity (D2),
-- per-class absorption (D3) и per-class weight profile (I2).
--
-- Workaround: fuzzy name-match domrf_kn_objects.comm_name ↔ yandex_realty_zk.name
-- через pg_trgm similarity(); опционально — price-inference по
-- yandex_realty_class_prices. Результат пишется в obj_class_fallback с пометкой
-- источника obj_class_source ('domrf' | 'yandex_match' | 'price_inference').
-- Backfill выполняет ETL-модуль app.services.etl.obj_class_backfill.
--
-- Порядок применения: схема первой (этот файл), затем backend-код,
-- читающий COALESCE(obj_class, obj_class_fallback).
--
-- Idempotent: ADD COLUMN IF NOT EXISTS + CREATE INDEX IF NOT EXISTS + CREATE
-- EXTENSION IF NOT EXISTS. Безопасно ре-применять.
BEGIN;
-- ── Колонки fallback ────────────────────────────────────────────────────────
-- obj_class_fallback — производный класс (когда реальный obj_class = NULL).
-- obj_class_source — провенанс класса:
-- 'domrf' — реальный obj_class из kn-API/AI-описания (этим файлом
-- не проставляется; для аудита, проставляет backfill).
-- 'yandex_match' — trigram-match comm_name ↔ yandex_realty_zk.name.
-- 'price_inference' — выведен по price_per_m2 vs yandex_realty_class_prices.
ALTER TABLE domrf_kn_objects
ADD COLUMN IF NOT EXISTS obj_class_fallback TEXT,
ADD COLUMN IF NOT EXISTS obj_class_source TEXT;
-- ── pg_trgm + GIN trgm индексы для similarity() perf ─────────────────────────
-- similarity(LOWER(a), LOWER(b)) без GIN trgm деградирует в seq-scan на каждой
-- паре (CROSS JOIN LATERAL). Индексы по выражению LOWER(...) ускоряют % / <-> .
CREATE EXTENSION IF NOT EXISTS pg_trgm;
CREATE INDEX IF NOT EXISTS idx_domrf_kn_objects_comm_name_trgm
ON domrf_kn_objects USING gin (LOWER(comm_name) gin_trgm_ops);
CREATE INDEX IF NOT EXISTS idx_yandex_realty_zk_name_trgm
ON yandex_realty_zk USING gin (LOWER(name) gin_trgm_ops);
-- ── Документация ────────────────────────────────────────────────────────────
COMMENT ON COLUMN domrf_kn_objects.obj_class_fallback IS
'Производный класс жилья, когда реальный obj_class = NULL (issue #38). '
'Источник в obj_class_source. Backfill: app.services.etl.obj_class_backfill.';
COMMENT ON COLUMN domrf_kn_objects.obj_class_source IS
'Провенанс класса: domrf | yandex_match | price_inference (issue #38).';
COMMIT;