gendesign/_wt-cadval/data/sql/141_okn_objects.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

65 lines
3.7 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.

-- 141_okn_objects.sql
-- #1066 (Site Finder v2 / GG-форсайт) — объекты культурного наследия (ОКН/памятники)
-- ЕКБ и Свердловской обл. из АИС ЕГРКН Минкультуры.
--
-- Источник: https://okn-mk.mkrf.ru/Maps/searchMap (POST, application/x-www-form-urlencoded)
-- Формат ответа: GeoJSON FeatureCollection с полями id + coordinates[lat, lon] (Яндекс-порядок).
--
-- Обновляется еженедельно воркером okn_objects_sync (tasks/okn_objects_sync.py).
-- Ключ дедупликации: source_id (id фичи карты ЕГРКН).
-- Категория берётся из прохода по cob_category_type=1/2/4 (federal/regional/local).
--
-- Deploy: auto-applied deploy.yml через _schema_migrations (ровно один раз по NN).
-- Idempotent (CREATE TABLE/INDEX IF NOT EXISTS + guarded DO-блоки по pg_constraint).
-- Без INSERT — данные приходят из Celery-воркера.
BEGIN;
-- ── 1. Таблица okn_objects ────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS okn_objects (
id BIGSERIAL PRIMARY KEY,
source_id TEXT NOT NULL, -- id фичи из ЕГРКН карты (дедуп)
category TEXT, -- 'federal' | 'regional' | 'local'
geom geometry(Point, 4326) NOT NULL, -- WGS84 точка (lon, lat)
raw_props JSONB, -- сырые props GeoJSON-фичи
fetched_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
COMMENT ON TABLE okn_objects IS
'Объекты культурного наследия (ОКН/памятники) ЕКБ и Свердловской обл. (#1066). '
'Источник: АИС ЕГРКН Минкультуры (okn-mk.mkrf.ru/Maps/searchMap). '
'Обновляется еженедельно воркером okn_objects_sync.';
COMMENT ON COLUMN okn_objects.source_id IS
'id фичи из GeoJSON ответа карты ЕГРКН. Используется как ключ дедупликации.';
COMMENT ON COLUMN okn_objects.category IS
'Категория ОКН: federal (cob_category_type=1), regional (=2), local (=4).';
COMMENT ON COLUMN okn_objects.geom IS
'Точка в WGS84 (EPSG:4326). Координаты из ЕГРКН [lat, lon] перевёрнуты: '
'ST_MakePoint(coordinates[1], coordinates[0]).';
-- ── 2. UNIQUE по source_id — ключ дедупликации для UPSERT ────────────────────
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM pg_constraint WHERE conname = 'uq_okn_objects_source_id'
) THEN
ALTER TABLE okn_objects
ADD CONSTRAINT uq_okn_objects_source_id UNIQUE (source_id);
END IF;
END
$$;
-- ── 3. GIST-индекс по геометрии (ST_DWithin / пространственный lookup) ────────
CREATE INDEX IF NOT EXISTS idx_okn_objects_geom
ON okn_objects USING GIST (geom);
-- ── 4. Индекс по категории (фильтрация по federal/regional/local) ─────────────
CREATE INDEX IF NOT EXISTS idx_okn_objects_category
ON okn_objects (category);
-- ── 5. Индекс по свежести данных ─────────────────────────────────────────────
CREATE INDEX IF NOT EXISTS idx_okn_objects_fetched_at
ON okn_objects (fetched_at DESC);
COMMIT;