gendesign/tradein-mvp/backend/data/sql/227_drop_position_in_serp.sql
bot-backend 2a1577738a
All checks were successful
Deploy Trade-In / changes (push) Successful in 11s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Successful in 2m59s
Deploy Trade-In / build-backend (push) Successful in 32s
Deploy Trade-In / deploy (push) Successful in 1m22s
chore(tradein/db): DROP listings_snapshots.position_in_serp — шаг 2 из 2 (#2697) (#2728)
2026-08-06 11:41:39 +00:00

41 lines
3.8 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.

-- 227_drop_position_in_serp.sql
-- listings_snapshots.position_in_serp — DROP, шаг 2 из 2 (#2697, продолжение #2674).
--
-- Dependencies: 217_position_in_serp_unexpressible.sql (диагноз + COMMENT на колонке).
-- Apply after: 224_houses_house_type_canon.sql
-- Идемпотентно: DROP COLUMN IF EXISTS.
--
-- ── ПОЧЕМУ УДАЛЯЕМ, А НЕ ПОДКЛЮЧАЕМ ──────────────────────────────────────────
-- Полный разбор — в 217. Кратко: позиция есть свойство пары (объявление, конкретный
-- прогон выдачи с конкретными фильтрами), а PRIMARY KEY (listing_id, snapshot_date)
-- держит одну строку на объявление в сутки — при том что за 2026-08-03 по этому ключу
-- писали 13 разных run_id и четыре SERP-источника, а внутри одного city_sweep
-- объявление приезжает с разным индексом от перекрывающихся гео-якорей. Значение
-- оседало бы от последнего писателя дня и читалось бы как факт. Честное хранение —
-- отдельная таблица с ключом (run_id, listing_id) и сохранёнными фильтрами прогона,
-- то есть НЕ возврат этой колонки.
--
-- ── ПРЕДУСЛОВИЕ ПРОВЕРЕНО ПЕРЕД МЕРЖЕМ (2026-08-06) ──────────────────────────
-- Окно «SQL применяется ДО перезапуска контейнеров» закрыто тем, что правка кода
-- (#2694) уже живёт на проде — проверено ПО КОДУ В КОНТЕЙНЕРАХ, не по зелёному
-- деплою: grep по /app в tradein-scraper и tradein-backend находит имя колонки
-- ровно в четырёх строках docstring'а snapshot_writer.py (18/34/37/76) и ни в одном
-- SQL; inspect.signature(upsert_listing_snapshot) колонку не содержит.
-- Оба живых писателя перечисляют колонки явно и этой в списке не имеют:
-- * scraper_kit/snapshot_writer.py::upsert_listing_snapshot (весь скрейп-путь),
-- * app/tasks/deactivate_stale_avito.py::_STALE_SNAPSHOT_TAIL (TTL-снимки 'stale').
--
-- ── ЧИТАТЕЛЕЙ НЕТ ────────────────────────────────────────────────────────────
-- На проде: 0 непустых значений из 397 217 строк; 0 view/matview зависят от колонки
-- (pg_depend → pg_rewrite); индексов и триггеров на ней нет; foreign table над
-- listings_snapshots не существует (FDW-обёртки только над gendesign-таблицами);
-- в information_schema.columns имя встречается ровно в этой таблице. В коде: ни
-- одного SELECT-читателя (`SELECT *` по таблице нигде нет), фронт/экспортёры/админка
-- колонку не упоминают. Единственный сторож — tests/test_snapshot_writer.py, он
-- проверяет отсутствие колонки у писателя и после DROP остаётся валиден.
BEGIN;
ALTER TABLE listings_snapshots DROP COLUMN IF EXISTS position_in_serp;
COMMIT;