You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Цель: таблица движений растёт неограниченно — нужно секционировать по времени (или архивировать старое), чтобы запросы истории и вставки не деградировали. Зависимость: PERF-1.
Что сделать
Выбрать стратегию: range-партиционирование stock_movements по created_at помесячно либо вынос старых записей в stock_movements_archive с ретеншном.
Для партиционирования:
CREATETABLEstock_movements (...)
PARTITION BY RANGE (created_at);
CREATETABLEstock_movements_y2026m06
PARTITION OF stock_movements
FOR VALUESFROM ('2026-06-01') TO ('2026-07-01');
Продумать автосоздание будущих партиций (джоба/pg_partman) и индексы на партициях (item_id, created_at).
Учесть PK: при партиционировании ключ должен включать created_at.
Стретч: миграция уже существующих данных в партиционированную таблицу без простоя (новая таблица → перелив батчами → переключение), оценить влияние на запрос истории (Просмотр истории товара (движение товара) #8) и отчёт low-stock.
Acceptance criteria
Движения пишутся в партицию/таблицу по месяцу created_at.
Запрос истории по item_id использует partition pruning (EXPLAIN ANALYZE бьёт по нужным партициям).
Есть механизм появления новой партиции до начала следующего месяца.
Цель: таблица движений растёт неограниченно — нужно секционировать по времени (или архивировать старое), чтобы запросы истории и вставки не деградировали.
Зависимость: PERF-1.
Что сделать
stock_movementsпоcreated_atпомесячно либо вынос старых записей вstock_movements_archiveс ретеншном.pg_partman) и индексы на партициях (item_id, created_at).created_at.Acceptance criteria
created_at.item_idиспользует partition pruning (EXPLAIN ANALYZEбьёт по нужным партициям).