From 8a266502a12888ce56eabb53ad963a928dcfc5cc Mon Sep 17 00:00:00 2001 From: lekss361 <47113017+lekss361@users.noreply.github.com> Date: Thu, 14 May 2026 23:29:28 +0300 Subject: [PATCH] fix(sql): wrap 73_complexes_master.sql in BEGIN/COMMIT (atomic apply) (#125) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per code review audit (May 14): файл без transaction wrapper — backfill CTE INSERTs + view recreations executed как individual auto-commit statements. Mid-file crash → orphan rows в complexes/complex_sources с no rollback path. ## Fix `BEGIN;` после header comments (line 31, перед section 1). `COMMIT;` в конце файла после последнего COMMENT ON VIEW. Wraps все 6 секций atomically: 1-2: CREATE TABLE + CREATE INDEX для complexes + complex_sources 3-5: 3 backfill CTE INSERTs с ON CONFLICT DO NOTHING 6: DROP VIEW IF EXISTS + CREATE VIEW + COMMENT для v_complex_full ## No CONCURRENTLY split needed Проверил — все 10 indexes используют plain `CREATE INDEX IF NOT EXISTS` без CONCURRENTLY keyword. Безопасно обернуть в одну tx. ## Idempotency preserved Все existing guards остаются: - CREATE TABLE/INDEX IF NOT EXISTS - ON CONFLICT (source, source_id) DO NOTHING - DROP VIEW IF EXISTS Re-running file двукратно — safe. ## Vault `fixes/Migration_73_Complexes_Atomic_May14.md` — created (status: resolved). Co-authored-by: lekss361 --- data/sql/73_complexes_master.sql | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/data/sql/73_complexes_master.sql b/data/sql/73_complexes_master.sql index 02e6a4e8..87767327 100644 --- a/data/sql/73_complexes_master.sql +++ b/data/sql/73_complexes_master.sql @@ -27,6 +27,8 @@ -- -- Идемпотентно через ON CONFLICT. +BEGIN; + -- ── 1. complexes (canonical master) ───────────────────────────────────────── CREATE TABLE IF NOT EXISTS complexes ( @@ -316,3 +318,5 @@ SELECT COMMENT ON VIEW v_complex_with_objective IS 'ЖК + агрегаты Objective per-flat: sold count/pct, средняя цена, ' 'диапазон reg_date. NULL во всех колонках = ЖК без Objective-источника.'; + +COMMIT;