From df35c31084d5f55edcab99bef51706b903dee811 Mon Sep 17 00:00:00 2001 From: bot-backend Date: Sat, 29 Aug 2026 19:14:34 +0500 Subject: [PATCH] =?UTF-8?q?fix(tradein):=20=D0=BC=D0=B8=D0=B3=D1=80=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=BF=D1=83=D0=B1=D0=BB=D0=B8=D1=87=D0=BD?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D1=82=D0=BE=D0=BA=D0=B5=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=B1=D0=B5=D0=B7=20lock=5Ftimeout=20=E2=80=94=20=D0=B3=D0=B5?= =?UTF-8?q?=D0=B9=D1=82=20#2752?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 278 делает ALTER TABLE trade_in_estimates ADD COLUMN + CREATE UNIQUE INDEX на ЖИВОЙ таблице (1123 строки на проде). ALTER берёт ACCESS EXCLUSIVE: без lock_timeout он встал бы в очередь за запросами приложения и утащил их за собой. Обёрнуто в BEGIN + SET LOCAL lock_timeout = '5s' + COMMIT по образцу 272_houses_region_code.sql. --- .../data/sql/278_trade_in_estimates_public_token.sql | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tradein-mvp/backend/data/sql/278_trade_in_estimates_public_token.sql b/tradein-mvp/backend/data/sql/278_trade_in_estimates_public_token.sql index 0b4445a6..f2fc98c4 100644 --- a/tradein-mvp/backend/data/sql/278_trade_in_estimates_public_token.sql +++ b/tradein-mvp/backend/data/sql/278_trade_in_estimates_public_token.sql @@ -19,6 +19,12 @@ -- -- Dependencies: trade_in_estimates (миграция 001+). -- Deploy order: применять после 277. +BEGIN; +-- Конвенция проекта (#2752): ALTER TABLE на ЖИВОЙ таблице берёт ACCESS +-- EXCLUSIVE, и без lock_timeout встанет в очередь за запросами приложения, +-- утащив их за собой. trade_in_estimates — таблица боевая (1123 строки на +-- 29.08), поэтому это не формальность. +SET LOCAL lock_timeout = '5s'; ALTER TABLE trade_in_estimates ADD COLUMN IF NOT EXISTS public_token_hash text, @@ -35,3 +41,5 @@ COMMENT ON COLUMN trade_in_estimates.public_token_hash IS 'sha256(hex) капабилити-токена бесплатной части (app/api/public/mera.py). Сам токен не хранится.'; COMMENT ON COLUMN trade_in_estimates.public_token_expires_at IS 'До какого момента работает GET /api/public/mera/estimate/{token}. Не связан с expires_at/retain_until.'; + +COMMIT;