fix(gisogd66): CAST(:geojson AS text) — AmbiguousParameter ронял каждый upsert #2383

Merged
bot-backend merged 1 commit from fix/gisogd66-geojson-cast into main 2026-07-04 06:55:18 +00:00
Collaborator

Что

Однострочный hotfix: второй прод-прогон (после #2371) скачал 11 235 карточек, но вставил 0 — каждый upsert падал psycopg.errors.AmbiguousParameter ($10). Корень: ни одно вхождение :geojson не давало Postgres тип параметра — CASE WHEN :geojson IS NULL тип не фиксирует, а ST_GeomFromGeoJSON перегружена (text/json/jsonb). Фикс — CAST(:geojson AS text) в обоих вхождениях (правило репо) + комментарий-предостережение.

Почему не поймали раньше: юнит-тесты мокают БД (нет реального Postgres), а ревью проверяло :x::type-антипаттерн, но не выводимость типов. Классу ошибок «психоз server-side binding» нужен интеграционный прогон — он и есть наш post-deploy verify, сработал как задуман.

Проверки

ruff + 32 gisogd-теста passed, pre-commit Passed.

Post-merge

Третий холодный прогон: ожидаю ~4-5k строк (регион + свежая часть ЕКБ), затем содержательная проверка данных (кадастры/геометрия/даты) и PR-2 (analyze + §6).

Refs #2367

## Что Однострочный hotfix: второй прод-прогон (после #2371) скачал 11 235 карточек, но вставил **0** — каждый upsert падал `psycopg.errors.AmbiguousParameter ($10)`. Корень: ни одно вхождение `:geojson` не давало Postgres тип параметра — `CASE WHEN :geojson IS NULL` тип не фиксирует, а `ST_GeomFromGeoJSON` перегружена (text/json/jsonb). Фикс — `CAST(:geojson AS text)` в обоих вхождениях (правило репо) + комментарий-предостережение. Почему не поймали раньше: юнит-тесты мокают БД (нет реального Postgres), а ревью проверяло `:x::type`-антипаттерн, но не выводимость типов. Классу ошибок «психоз server-side binding» нужен интеграционный прогон — он и есть наш post-deploy verify, сработал как задуман. ## Проверки ruff + 32 gisogd-теста passed, pre-commit Passed. ## Post-merge Третий холодный прогон: ожидаю ~4-5k строк (регион + свежая часть ЕКБ), затем содержательная проверка данных (кадастры/геометрия/даты) и PR-2 (analyze + §6). Refs #2367
bot-backend added 1 commit 2026-07-04 06:38:53 +00:00
fix(gisogd66): CAST(:geojson AS text) — AmbiguousParameter ронял каждый upsert
All checks were successful
CI / changes (pull_request) Successful in 8s
CI Trade-In / changes (pull_request) Successful in 8s
CI / frontend-tests (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m11s
CI / backend-tests (pull_request) Successful in 15m5s
cf3a23112d
Второй прод-прогон: 11235 карточек скачано, 0 вставлено — все upsert'ы
падали psycopg.errors.AmbiguousParameter ($10): ни одно вхождение
:geojson (CASE WHEN + перегруженная ST_GeomFromGeoJSON text/json/jsonb)
не давало Postgres тип параметра. Тесты не ловили — БД в них замокана.

Refs #2367
bot-backend merged commit 4f0cae5c18 into main 2026-07-04 06:55:18 +00:00
bot-backend deleted branch fix/gisogd66-geojson-cast 2026-07-04 06:55:19 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2383
No description provided.