Оба места утверждали, что у Домклика один выделенный резидентный прокси и пула нет. Это перестало быть правдой ещё в #2800 (миграция 253 сняла резервацию узла), но текст остался — и именно на него опирался тикет #3189, поставленный под «калибровку» ограничения, которого не существует. Свип к тому же ходит через пул давно (serp.py:359), а бэкфилл подключён к нему в PR #3222. Заодно докстринг называл не тот ограничитель: свип кладёт не счётчик провалов lease, а break по первому DomClickBlockedError (#2854) — до ротации дело не доходит ни при каком счётчике, отсюда buckets_completed=0. Только комментарии, поведение не меняется. Миграция 175 уже применена, а _schema_migrations трекает по имени файла без checksum — правка текста её не перезапустит.
65 lines
3.7 KiB
PL/PgSQL
65 lines
3.7 KiB
PL/PgSQL
-- 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;
|