gendesign/data/sql/79_relax_objective_raw_payload_null.sql
lekss361 4875ef15c3 fix(scrape-objective): stream-parse lots_pf via ijson to avoid OOM
httpx.Response.json() загружает 607 МБ payload в Python list[dict] -> 2-3 ГБ RAM -> host OOM-killer SIGKILL ForkPoolWorker.

Изменения:
- ObjectiveClient._open_stream() / stream_report() — httpx stream=True
- parse_lots_pf_stream() — ijson.items() с batched UPSERT + commit/5 batch
- _save_raw() принимает payload=None для streamed reports
- objective_raw_reports.payload allowed NULL (миграция 79)
- ijson>=3.2.0 добавлен в pyproject.toml, uv.lock обновлён

Glitchtip BACKEND-1H/-1I (release fce48a8) — OOM на live trigger.
2026-05-17 19:33:43 +03:00

14 lines
810 B
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 79_relax_objective_raw_payload_null.sql
-- Разрешаем NULL в objective_raw_reports.payload для stream-parsed отчётов.
-- Поквартирные/Лоты (lots_pf) могут быть 600+ МБ — хранить полный JSONB не имеет
-- смысла (96 ГБ за полгода × 4 группы × еженедельно). Для таких отчётов пишем
-- payload = NULL, size и rows_extracted по-прежнему заполняются.
BEGIN;
ALTER TABLE objective_raw_reports ALTER COLUMN payload DROP NOT NULL;
COMMENT ON COLUMN objective_raw_reports.payload IS
'NULL для stream-parsed отчётов (lots_pf 600+ МБ — не храним целиком). '
'payload_size и rows_extracted всегда заполнены.';
COMMIT;