gendesign/_wt-cadval/data/sql/142_pat_subzones.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

60 lines
3.5 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.

-- 142_pat_subzones.sql
-- #1065 / #1067 (Site Finder v2 / GG-форсайт) — подзоны приаэродромных территорий (ПАТ).
-- Первый аэродром: Кольцово (Приказ Росавиации № 367-П от 02.06.2023, ред. 804-П от 27.10.2025).
--
-- Геометрия строится Celery-воркером pat_subzones_load из извлечённых координат МСК-66
-- (файл data/pat/koltsovo_367p_subzones.json) с репроекцией → WGS84 (EPSG:4326).
--
-- Поддерживает несколько аэродромов (поле aerodrome), subzone_no=0 — общий контур.
--
-- Deploy: auto-applied deploy.yml через _schema_migrations (ровно один раз по NN=142).
-- Idempotent (CREATE TABLE/INDEX IF NOT EXISTS + guarded DO-блоки).
-- Данные загружаются отдельно Celery-воркером (tasks.pat_subzones_load.load_koltsovo_pat).
BEGIN;
-- ── 1. Таблица pat_subzones ───────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS pat_subzones (
id BIGSERIAL PRIMARY KEY,
aerodrome TEXT NOT NULL, -- 'Екатеринбург (Кольцово)' и т.д.
subzone_no INTEGER NOT NULL, -- 1..6; 0 = aggregate_outline
name TEXT, -- 'Первая подзона' и т.д.
restriction TEXT, -- текст ограничения из приказа
geom geometry(MultiPolygon, 4326) NOT NULL,
source TEXT, -- URL/реквизит НПА
fetched_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
COMMENT ON TABLE pat_subzones IS
'Подзоны приаэродромных территорий (ПАТ), EPSG:4326 (#1065/#1067). '
'Источник: Приказы Росавиации. Первый аэродром: Кольцово (367-П/804-П). '
'Геометрия загружается воркером tasks.pat_subzones_load.load_koltsovo_pat.';
COMMENT ON COLUMN pat_subzones.aerodrome IS
'Наименование аэродрома из НПА, напр. «Екатеринбург (Кольцово)».';
COMMENT ON COLUMN pat_subzones.subzone_no IS
'Номер подзоны 1..6 по НБНРД. 0 — aggregate_outline (общий контур ПАТ).';
COMMENT ON COLUMN pat_subzones.geom IS
'MultiPolygon WGS84. Внутренние границы секторов стали дырками Polygon.';
-- ── 2. UNIQUE (aerodrome, subzone_no) — ключ для UPSERT ──────────────────────
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM pg_constraint WHERE conname = 'uq_pat_subzones_aerodrome_no'
) THEN
ALTER TABLE pat_subzones
ADD CONSTRAINT uq_pat_subzones_aerodrome_no UNIQUE (aerodrome, subzone_no);
END IF;
END
$$;
-- ── 3. GIST-индекс по геометрии (ST_Intersects / parcel-lookup) ──────────────
CREATE INDEX IF NOT EXISTS idx_pat_subzones_geom
ON pat_subzones USING GIST (geom);
-- ── 4. Индекс по аэродрому (фильтрация per-aerodrome) ────────────────────────
CREATE INDEX IF NOT EXISTS idx_pat_subzones_aerodrome
ON pat_subzones (aerodrome);
COMMIT;