feat(sql): ird_overlays durable overlay store for ИРД geometry (#1067) #1078
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#1078
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/ird-overlays-table"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что
Миграция
data/sql/132_ird_overlays.sql— долговременное хранилище геометрии ИРД-ограничений участка (ЗОУИТ / ПЗЗ-границы / ОКН / ООПТ-леса-вода), снятых из НСПД WMS GetFeatureInfo по кварталам ЕКБ. Фундамент harvest-движка (#1067 B5) + read-sideparcel_ird_overlaps(D9).Дизайн (по разведке 2026-06-06 — vault
research/NSPD_IRD_Layers_Automation_Recon_Jun06)НСПД отдаёт по фиче только геометрию + reg_numb_border + category/subcategory (ни ВРИ, ни типа, ни имени). Поэтому:
geom geometry(Geometry, 4326)+ GIST — площадные зоны (Polygon/MultiPolygon) и линейные (875835 береговые). Главный read-path:ST_Intersects(parcel.geom, ird.geom)в analyze.uq_ird_overlays_feature (source_layer_id, geom_data_id)—geom_data_idстабильный id геометрии НСПД (есть во всех ответах;reg_numb_borderне гарантирован → не ключ).layer_kind— наш читаемый бакет (ключLAYERS), т.к. НСПД текстового типа не даёт.zone_index,zone_type_name,content,content_source,content_fetched_at) — NULLABLE*: дорезолвятся ОТДЕЛЬНО из ЕКБ-геопортала ИСОГД / ЕГРН (#1067 C8/D9). Геометрия живёт независимо; re-harvest не трёт content. Partial-indexidx_ird_overlays_content_pending(content_fetched_at IS NULL) — очередь резолва.Идемпотентность / deploy
CREATE TABLE/INDEX IF NOT EXISTS+ guardedDO-блок для UNIQUE (pg_constraint, прецедент м.40/125). Auto-apply через_schema_migrations(deploy.yml). Строк не вставляет.Validation
Прогнано на prod-PostGIS 3.4 (
gendesign-postgres-1) в rollback-транзакции (COMMIT→ROLLBACK, прод не изменён):BEGIN → CREATE TABLE → 6×COMMENT → DO → 5×CREATE INDEX → ROLLBACK, без ошибок.Refs #1067 (ИРД foundation B3). Next: B5 harvest-воркер UPSERT-ит сюда; C8/D9 заполняют content_*.
✅ APPROVE
DDL-миграция
132_ird_overlays.sqlкорректна и идемпотентна:CREATE TABLE/INDEX IF NOT EXISTS×6 + guardedDO(pg_constraint) для UNIQUE — двойной apply чист.geometry(Geometry, 4326)+ GIST — верный выбор под mixed Polygon/LineString (875835 береговые). Partial-индексы (reg_numb_border/zone_index/content_fetched_at IS NULL) обоснованы query-паттернами C8/D9.BEGIN/COMMITобёртка; CHECKgeom_data_id > 0ловит мусор harvest'а на write.Минор (advisory, не блок): DO-guard
WHERE conname='uq_ird_overlays_feature'безconnamespace/conrelidфильтра — теоретический false-positive при одноимённом constraint в другой схеме; в этой БД толькоpublic, риск нулевой, паттерн консистентен с м.40/125. В очередь не выношу.Verify-gap (честно): прямую
to_regclass('public.ird_overlays') IS NULLподтвердить не смог — postgres-gendesign MCP не поднят в reviewer-окне (нет SSH-туннеля), Actions-run API → 404, SSH в прод → denied. Полагаюсь на prod-rollback-валидацию PR + идемпотентные guards. Миграции применяются ДОcompose up -d, поэтому при падении SQL деплой halt'ится (exit 1) и публичный/healthостанется зелёным на старой версии — для DDL-PR это не индикатор. Финальное подтверждение «таблица создана» — за postgres-capable окном (qa/human) после деплоя.Merge.