From a142e6e937499b048106ef66e8171b54dde0471d Mon Sep 17 00:00:00 2001 From: OG T Date: Wed, 15 Apr 2026 15:00:49 +0800 Subject: [PATCH] =?UTF-8?q?fix(db):=20create=5Fall=20checkfirst=3DTrue=20?= =?UTF-8?q?=E4=BF=AE=E5=BE=A9=20CrashLoopBackOff?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit rolling update 時 create_all 嘗試重建既有 index 導致 "ix_incident_evidence_incident_id already exists" 啟動失敗。 checkfirst=True 讓 SQLAlchemy 跳過已存在的 table/index, init_db() 從此冪等,不再造成 CrashLoopBackOff。 Co-Authored-By: Claude Sonnet 4.6 --- apps/api/src/db/base.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/api/src/db/base.py b/apps/api/src/db/base.py index f7e16f11..e17a68ab 100644 --- a/apps/api/src/db/base.py +++ b/apps/api/src/db/base.py @@ -144,7 +144,9 @@ async def init_db() -> None: """ engine = get_engine() async with engine.begin() as conn: - await conn.run_sync(Base.metadata.create_all) + # checkfirst=True: 存在的 table/index 直接跳過,避免 rolling update 重啟時 + # "relation already exists" CrashLoopBackOff(2026-04-15 Claude Sonnet 4.6 Phase 3 修復) + await conn.run_sync(lambda c: Base.metadata.create_all(c, checkfirst=True)) # 2026-04-02 Claude Code: 確保 risklevel enum 包含 'high' 值 # Phase 23 新增,避免舊 DB 缺少此值導致 InvalidTextRepresentation