gendesign/_wt-cadval/data/sql/170_osm_utility_infrastructure_ekb.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

53 lines
3.3 KiB
PL/PgSQL

-- 170_osm_utility_infrastructure_ekb.sql
-- Context: Таблица инженерных сетей («инженерные сети») Екатеринбурга из OSM (#1746).
-- No-B2B open-data путь: Overpass API. Хранит магистральные линии
-- (ЛЭП, трубопроводы — way → LineString) И точки/узлы (опоры ЛЭП,
-- подстанции, водозаборы, ЦТП, вышки связи — node → Point) для быстрых
-- ST_DWithin-запросов «инж.сети в радиусе участка».
-- Дополняет osm_noise_sources_ekb (там utility-срез завязан на noise-loader);
-- этот слой — самостоятельный, типизированный по infrastructure_kind.
-- Source: Overpass API (power/water/gas/heat/communication queries).
-- Geometry: mixed (LineString для way / Point для node) -> geometry(Geometry, 4326)
-- Dependencies: PostGIS (уже установлен в prod)
-- Deploy order: standalone, нет зависимостей от других таблиц
-- Idempotent: да (IF NOT EXISTS / IF NOT EXISTS на индексах)
BEGIN;
CREATE TABLE IF NOT EXISTS osm_utility_infrastructure_ekb (
id BIGSERIAL PRIMARY KEY,
osm_id BIGINT NOT NULL,
osm_type TEXT NOT NULL, -- 'node' | 'way' | 'relation'
-- Нормализованный вид инженерной сети:
-- 'power' | 'water' | 'gas' | 'heat' | 'communication' | 'sewage'
infrastructure_kind TEXT NOT NULL,
name TEXT,
geom GEOMETRY(Geometry, 4326) NOT NULL, -- линии И точки
source_tag TEXT, -- OSM key=value, по которому элемент пойман
tags JSONB DEFAULT '{}'::jsonb,
fetched_at TIMESTAMPTZ NOT NULL DEFAULT now(),
UNIQUE (osm_type, osm_id)
);
-- GIST индекс для ST_DWithin / ST_Intersects запросов (инж.сети в радиусе участка)
CREATE INDEX IF NOT EXISTS osm_utility_infrastructure_ekb_geom_idx
ON osm_utility_infrastructure_ekb USING GIST (geom);
-- Индекс по виду сети для фильтрации (power/water/gas/...)
CREATE INDEX IF NOT EXISTS osm_utility_infrastructure_ekb_kind_idx
ON osm_utility_infrastructure_ekb (infrastructure_kind);
COMMENT ON TABLE osm_utility_infrastructure_ekb IS
'Инженерные сети Екатеринбурга из OSM (power/water/gas/heat/communication/sewage). '
'No-B2B open-data источник: Overpass API. Линии (ЛЭП/трубопроводы) и узлы '
'(подстанции/водозаборы/ЦТП/вышки связи) для site-finder utility-infrastructure. '
'Маппинг OSM-тегов -> infrastructure_kind: '
'backend/app/services/site_finder/utility_infrastructure_loader.py';
COMMENT ON COLUMN osm_utility_infrastructure_ekb.infrastructure_kind IS
'Нормализованный вид сети: power | water | gas | heat | communication | sewage.';
COMMENT ON COLUMN osm_utility_infrastructure_ekb.source_tag IS
'OSM key=value, по которому элемент пойман (например power=line, pipeline=gas).';
COMMIT;