fix(db): retire legacy cad_buildings_pkey — fix migration 92 hotfix (#168) #173
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#173
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/cadastre-schema-pkey-rename"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
ALTER INDEX cad_buildings_new_pkey RENAME TO cad_buildings_pkey, но имя уже занято — старый PK index остался на backup-таблицеError from deploy logs
Why this happens
ALTER TABLE cad_buildings RENAME TO cad_buildings_old_apr26— table renamed ✓cad_buildings_pkeyостался наcad_buildings_old_apr26ALTER INDEX cad_buildings_new_pkey RENAME TO cad_buildings_pkey→ collisionFix
Add explicit rename of legacy PK index BEFORE new rename:
IF EXISTSmakes it idempotent. Comment explains why.State on prod
Migration 92 transaction rolled back (3× failures) → NOT in
_schema_migrations.After merge → next deploy will re-run 92 fresh с этим фиксом → success.
Test plan
\dt cad_*показывает 7 новых таблиц + cad_buildings + cad_buildings_old_apr26\di cad_buildings*показывает оба cad_buildings_pkey и cad_buildings_old_apr26_pkeyCloses hotfix path of #168.
Final review (SHA verified, CI ✅) — critical hotfix
Cross-checked агентом — fix корректен, дополнительно подтверждено: 2 deploy workflows на main падали (после merges #171, #172). Production не получает новые изменения с момента #169 deploy attempt.
Bug (verified)
ALTER TABLE cad_buildings RENAME TO cad_buildings_old_apr26✓ rename'ит tablecad_buildings_pkeyостался прикреплён кcad_buildings_old_apr26ALTER INDEX cad_buildings_new_pkey RENAME TO cad_buildings_pkey→relation already exists→ tx rollbackFix correctness
✅ Surgical +6/-0 — добавлена 1 line:
ALTER INDEX IF EXISTS cad_buildings_pkey RENAME TO cad_buildings_old_apr26_pkey;ПЕРЕД K.3 collision✅ IF EXISTS на обоих rename — idempotent
✅ Внутри existing
IF NOT EXISTS cad_buildingsguard — preserves once-only invariant✅ Comment explains why rename нужен
Modify-in-place justified
✅ Migration 92 транзакция rolled back 3× → никогда не была в
_schema_migrations→ edit existing file корректно. NN_NN.sql не нужен.State
✅ CI green (backend + frontend SUCCESS)
✅ mergeable=MERGEABLE, mergeStateStatus=CLEAN
✅ Никаких manual ops на prod не требуется
✅ Backend code не зависит от PK names (FK резолвится через table+col, не constraint name)
Lesson learned для меня
Мой previous agent review #169 confirmed K.3 fix как "ALTER INDEX RENAME уже rename'ит PK constraint automatically" — но не заметил что
cad_buildings_pkeyуже занят старым PK на backup table. Это subtle PG schema interaction которое CI не отловило бы без реального run на DB с existing data. На будущее — для migrations с RENAME операциями стоит специально проверять что target names не conflict с indexes сохранившимися от прошлых objects.approve merge