Оба места утверждали, что у Домклика один выделенный резидентный прокси и пула нет. Это перестало быть правдой ещё в #2800 (миграция 253 сняла резервацию узла), но текст остался — и именно на него опирался тикет #3189, поставленный под «калибровку» ограничения, которого не существует. Свип к тому же ходит через пул давно (serp.py:359), а бэкфилл подключён к нему в PR #3222. Заодно докстринг называл не тот ограничитель: свип кладёт не счётчик провалов lease, а break по первому DomClickBlockedError (#2854) — до ротации дело не доходит ни при каком счётчике, отсюда buckets_completed=0. Только комментарии, поведение не меняется. Миграция 175 уже применена, а _schema_migrations трекает по имени файла без checksum — правка текста её не перезапустит.
47 lines
2.5 KiB
SQL
47 lines
2.5 KiB
SQL
-- Расширения схемы для регулярного парсинга наш.дом.рф /сервисы/api/kn/{flats,objects}.
|
||
-- См. план C:\Users\user\.claude\plans\crispy-waddling-swing.md.
|
||
|
||
-- ── Версионирование строк через UNIQUE (id, snapshot_date) ────────────────
|
||
-- Текущий PK на flats.id и objects.obj_id мешает сохранять несколько срезов
|
||
-- одного и того же ЖК/квартиры. Меняем на UNIQUE по (id, snapshot_date)
|
||
-- чтобы UPSERT идемпотентно записывал свежий snapshot.
|
||
|
||
ALTER TABLE domrf_kn_flats DROP CONSTRAINT IF EXISTS domrf_kn_flats_pkey;
|
||
ALTER TABLE domrf_kn_flats
|
||
ADD CONSTRAINT uq_kn_flats_id_snap UNIQUE (id, snapshot_date);
|
||
|
||
ALTER TABLE domrf_kn_objects DROP CONSTRAINT IF EXISTS domrf_kn_objects_pkey;
|
||
ALTER TABLE domrf_kn_objects
|
||
ADD CONSTRAINT uq_kn_objects_id_snap UNIQUE (obj_id, snapshot_date);
|
||
|
||
-- ── Backfill region_cd для Антоновых flats где obj_id матчится с Свердл ──
|
||
UPDATE domrf_kn_flats f
|
||
SET region_cd = 66
|
||
FROM domrf_kn_objects o
|
||
WHERE f.obj_id = o.obj_id
|
||
AND o.region_cd = 66
|
||
AND f.region_cd IS NULL;
|
||
|
||
-- ── Композитные индексы для выборок последнего среза ──────────────────────
|
||
CREATE INDEX IF NOT EXISTS idx_kn_flats_region_snap
|
||
ON domrf_kn_flats (region_cd, snapshot_date);
|
||
CREATE INDEX IF NOT EXISTS idx_kn_objects_region_snap
|
||
ON domrf_kn_objects (region_cd, snapshot_date);
|
||
|
||
-- ── Журнал прогонов скрейпера ─────────────────────────────────────────────
|
||
CREATE TABLE IF NOT EXISTS kn_scrape_runs (
|
||
run_id BIGSERIAL PRIMARY KEY,
|
||
started_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||
finished_at TIMESTAMPTZ,
|
||
region_codes INT[] NOT NULL,
|
||
developer_ids TEXT[],
|
||
objects_count INT,
|
||
flats_count INT,
|
||
requests_count INT,
|
||
status TEXT NOT NULL DEFAULT 'running', -- running | done | failed
|
||
error TEXT,
|
||
snapshot_date DATE NOT NULL DEFAULT CURRENT_DATE
|
||
);
|
||
CREATE INDEX IF NOT EXISTS idx_kn_runs_status ON kn_scrape_runs (status, started_at DESC);
|
||
|
||
COMMENT ON TABLE kn_scrape_runs IS 'Журнал запусков парсера наш.дом.рф kn-API. Один прогон = один (regions, developers) sweep.';
|