From cf3a23112d939c3152226f74ad173c0f67367ed2 Mon Sep 17 00:00:00 2001 From: bot-backend Date: Sat, 4 Jul 2026 11:38:31 +0500 Subject: [PATCH] =?UTF-8?q?fix(gisogd66):=20CAST(:geojson=20AS=20text)=20?= =?UTF-8?q?=E2=80=94=20AmbiguousParameter=20=D1=80=D0=BE=D0=BD=D1=8F=D0=BB?= =?UTF-8?q?=20=D0=BA=D0=B0=D0=B6=D0=B4=D1=8B=D0=B9=20upsert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Второй прод-прогон: 11235 карточек скачано, 0 вставлено — все upsert'ы падали psycopg.errors.AmbiguousParameter ($10): ни одно вхождение :geojson (CASE WHEN + перегруженная ST_GeomFromGeoJSON text/json/jsonb) не давало Postgres тип параметра. Тесты не ловили — БД в них замокана. Refs #2367 --- backend/app/services/scrapers/gisogd66.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/backend/app/services/scrapers/gisogd66.py b/backend/app/services/scrapers/gisogd66.py index fa2f86b1..459a7362 100644 --- a/backend/app/services/scrapers/gisogd66.py +++ b/backend/app/services/scrapers/gisogd66.py @@ -277,8 +277,12 @@ def _upsert_permit(db: Session, rec: dict[str, Any]) -> str: :doc_group, :doc_num, :doc_name, :date_doc, :date_reg, :approved_org, :source_schema, :source_key, CAST(:cad_nums AS text[]), - CASE WHEN :geojson IS NULL THEN NULL - ELSE ST_Multi(ST_SetSRID(ST_GeomFromGeoJSON(:geojson), 4326)) END, + -- CAST обязателен: без него ни одно вхождение :geojson не даёт Postgres + -- тип параметра (ST_GeomFromGeoJSON перегружена text/json/jsonb) → + -- psycopg.errors.AmbiguousParameter на КАЖДОЙ строке (прод-прогон #2367). + CASE WHEN CAST(:geojson AS text) IS NULL THEN NULL + ELSE ST_Multi(ST_SetSRID( + ST_GeomFromGeoJSON(CAST(:geojson AS text)), 4326)) END, NOW(), NOW() ) ON CONFLICT (doc_group, doc_num) DO UPDATE