Some checks failed
CI / changes (push) Successful in 7s
CI / frontend-tests (push) Has been skipped
CI / changes (pull_request) Successful in 6s
CI / frontend-tests (pull_request) Has been skipped
CI / backend-tests (push) Successful in 6m43s
CI / backend-tests (pull_request) Successful in 6m41s
Deploy / build-backend (push) Blocked by required conditions
Deploy / deploy (push) Blocked by required conditions
Deploy / build-worker (push) Blocked by required conditions
Deploy / build-frontend (push) Blocked by required conditions
Deploy / changes (push) Has been cancelled
#252: NspdBulkServerError на HTTP 5xx + WMS <ServiceException>-body → quarter-level autoretry; _grid_walk_category флагует layer_failed только если ВСЕ cells 5xx (none ok), network-errors исключены — пустой/флапающий слой не ложно-скипается. harvest_meta.layer_X_failed. #259: pzz-sync-monthly beat отключён (PKK6 deprecated, pzz_zones_ekb=0, заменён zone_regulation_cache+NSPD dumps). logger.exception→warning (стоп GlitchTip BACKEND-1B), raise сохранён для admin-endpoint. #200: geom_unavailable флаг (миграция 151) + backfill_parcel_geom task — grid-walk layer 36368 per quarter лечит 930/964 NULL-geom участков (NSPD search вернул центроиды), остаток marks unavailable (не ретраить вечно). SAVEPOINT per-cell, idempotent. Closes #252 Closes #259 Closes #200
51 lines
3.5 KiB
PL/PgSQL
51 lines
3.5 KiB
PL/PgSQL
-- 151_cad_parcels_geom_unavailable.sql
|
||
-- ---------------------------------------------------------------------------
|
||
-- Контекст (issue #200):
|
||
-- На prod ~964 строки cad_parcels с geom IS NULL. Ground-truth (измерено
|
||
-- 2026-06-13): 930/964 — реальные участки ЕКБ 66:41:NNNNNN:NN, все
|
||
-- source='search'. NSPD search-эндпоинт для квартала возвращает участок без
|
||
-- полигона (только центроид/Point ИЛИ вовсе без geometry → upsert_parcel
|
||
-- пишет geom=NULL, см. bulk_harvest.py). Остаток (34) — кросс-региональные
|
||
-- артефакты поиска (последний сегмент :41 / :66 — это номер участка из
|
||
-- ДРУГОГО квартала, попавший в выдачу), у которых полигона в WMS-слое
|
||
-- 36368 нет вовсе.
|
||
--
|
||
-- Полигон для большинства восстановим grid-walk'ом слоя 36368 (WMS
|
||
-- GetFeatureInfo по bbox квартала — Phase 2-3 bulk_harvest). Но для
|
||
-- систематически недоступных (кросс-региональные артефакты) бесконечный
|
||
-- ретрай вреден: каждый прогон бэкфилла снова бы их дёргал.
|
||
--
|
||
-- Действие:
|
||
-- Добавить флаг geom_unavailable BOOLEAN. Backfill-task
|
||
-- (tasks.cadastre.backfill_parcel_geom) выставляет его в TRUE, когда после
|
||
-- grid-walk слоя участок ВСЁ ЕЩЁ без полигона — значит geom систематически
|
||
-- недоступен, перестаём ретраить. Дефолт FALSE — обычные участки и новые
|
||
-- inserts не затрагиваются; пересчёт делает только бэкфилл.
|
||
--
|
||
-- Partial-индекс под выборку «кого ещё докачивать»
|
||
-- (geom IS NULL AND NOT geom_unavailable) — узкий, индексирует только
|
||
-- рабочую очередь, не всю таблицу (40k строк).
|
||
--
|
||
-- Идемпотентность: ADD COLUMN IF NOT EXISTS + CREATE INDEX IF NOT EXISTS.
|
||
-- Apply order: чистая схема, без зависимости от кода. Backend-код с
|
||
-- backfill-task деплоится после (правило sql.md: схема → код).
|
||
-- ---------------------------------------------------------------------------
|
||
|
||
BEGIN;
|
||
|
||
ALTER TABLE cad_parcels
|
||
ADD COLUMN IF NOT EXISTS geom_unavailable BOOLEAN NOT NULL DEFAULT FALSE;
|
||
|
||
COMMENT ON COLUMN cad_parcels.geom_unavailable IS
|
||
'issue #200: TRUE — geom систематически недоступен в НСПД (grid-walk слоя '
|
||
'36368 не вернул полигон). Выставляется backfill-task'
|
||
' (tasks.cadastre.backfill_parcel_geom), чтобы не ретраить докачку вечно. '
|
||
'FALSE (дефолт) — geom либо есть, либо ещё не пробовали докачать.';
|
||
|
||
-- Рабочая очередь бэкфилла: участки без геометрии, которые ещё имеет смысл
|
||
-- докачивать. Partial WHERE держит индекс компактным.
|
||
CREATE INDEX IF NOT EXISTS cad_parcels_geom_backfill_queue
|
||
ON cad_parcels (cad_num)
|
||
WHERE geom IS NULL AND geom_unavailable = FALSE;
|
||
|
||
COMMIT;
|