Хвост #2699. Миграция 238 свела высоту потолков к канону ceiling_height_m и
намеренно оставила старую колонку: «сначала прод должен подтвердить, что
колонку никто не пишет и не читает». Подтверждение получено.
Критерий «писателей нет» был записан ДО работы: count(ceiling_height) обязан
остаться 8552. Прод: 8552 07.08 (сразу после 238), 8552 09.08 16:54 UTC,
8552 в 16:57. Двое суток без единой записи.
Контроль, что замер не мёртвый (иначе «ничего не изменилось» одинаково
выглядит и при остановленном скрейпинге): за те же 2.5 минуты между двумя
замерами count(ceiling_height_m) вырос 16133 → 16147, а last_seen_at строк с
непустым ceiling_height обновлялся в минуту замера. UPDATE по этим самым
строкам идут прямо сейчас и сносимую колонку не трогают.
Потребители сверены на origin/main (не в рабочей копии): обращений к КОЛОНКЕ
не осталось. В выдаче grep только имена полей датаклассов enrichment'ов,
имя бинд-параметра `:ceiling_height`, который присваивается ceiling_height_m
(yandex/detail.py:600), комментарии с историей и тесты, утверждающие
отсутствие колонки в SQL писателей. Фронтовых вхождений нет.
Зависимости в схеме проверены на проде, все нули: pg_depend по атрибуту,
вьюхи/матвьюхи, индексы, CHECK, функции, тела обоих триггеров listings,
publication column lists, foreign tables в gendesign-БД. CASCADE не нужен и
не добавлен — в этом продукте DROP ... CASCADE уже терял гранты FDW-юзеру.
Потери данных нет: строк «ceiling_height есть, канона нет» — 0; заполнены обе
у 8552 строк, расхождений 0.
lock_timeout обязателен и здесь дороже, чем у 250: удержание ACCESS EXCLUSIVE
дёшево (DROP COLUMN не переписывает heap, только attisdropped в каталоге — в
listings уже 4 таких пенька), но ожидание идёт по таблице в 19 GB, по которой
постоянно пишет скрейпинг.
Обе миграции прогнаны на одноразовом PostgreSQL 16.4 (postgis/postgis:16-3.4,
--network none) на минимальном слепке схемы: применяются, идемпотентны при
повторном прогоне, дубль индекса снят, колонка снята, ceiling_height_m и оба
COMMENT на месте.
Refs #2699