-- ADR-071-A: 告警通知四類型 + 全生命週期 DB 記錄 -- 建立時間: 2026-04-11 (台北時區) -- 建立者: Claude Sonnet 4.6 — ADR-071 第一批 -- -- 設計說明: -- 在現有表上補充欄位,不新建表 -- PgEnum ADD VALUE 必須在獨立 transaction 執行(不能在同一 tx 內使用新值) -- -- 執行順序: -- Step 1: PgEnum 新增值(獨立 transaction) -- Step 2: incidents 表新增 7 個欄位 -- Step 3: 驗收查詢 -- ============================================================================ -- Step 1: alert_event_type PgEnum 新增 5 個值 -- 注意: ADD VALUE IF NOT EXISTS 是 idempotent,重複執行安全 -- 注意: 每個 ADD VALUE 必須在獨立 transaction(不能批次) -- ============================================================================ -- 分類通知事件 ALTER TYPE alert_event_type ADD VALUE IF NOT EXISTS 'NOTIFICATION_CLASSIFIED'; -- 手動修復記錄 ALTER TYPE alert_event_type ADD VALUE IF NOT EXISTS 'MANUAL_FIX_RECORDED'; -- KM 轉換完成 ALTER TYPE alert_event_type ADD VALUE IF NOT EXISTS 'KM_CONVERTED'; -- Playbook 草稿建立 ALTER TYPE alert_event_type ADD VALUE IF NOT EXISTS 'PLAYBOOK_DRAFT_CREATED'; -- 狀態機守衛攔截 ALTER TYPE alert_event_type ADD VALUE IF NOT EXISTS 'STATE_GUARD_BLOCKED'; -- ============================================================================ -- Step 2: incidents 表新增 7 個欄位 -- 注意: ADD COLUMN IF NOT EXISTS 是 idempotent,重複執行安全 -- ============================================================================ -- 通知類型記錄 (TYPE-1/2/3/4/4D) ALTER TABLE incidents ADD COLUMN IF NOT EXISTS notification_type VARCHAR(10); -- 告警類別(決定 TYPE-3 按鈕組合) ALTER TABLE incidents ADD COLUMN IF NOT EXISTS alert_category VARCHAR(50); -- MCP 情報收集快照(執行前,Sprint A 完成後由 MCP Phase 2 填充) ALTER TABLE incidents ADD COLUMN IF NOT EXISTS context_bundle JSONB; -- 指標快照(執行前,Prometheus MCP 採集)— ADR-071-I 使用 ALTER TABLE incidents ADD COLUMN IF NOT EXISTS metrics_before JSONB; -- 指標快照(執行後,Prometheus MCP 採集)— ADR-071-I 使用 ALTER TABLE incidents ADD COLUMN IF NOT EXISTS metrics_after JSONB; -- 執行驗證結果(K8s MCP watch_rollout 結果)— ADR-071-J 使用 ALTER TABLE incidents ADD COLUMN IF NOT EXISTS verification_result JSONB; -- 手動修復步驟(TYPE-4 使用者輸入) ALTER TABLE incidents ADD COLUMN IF NOT EXISTS manual_fix_steps TEXT; ALTER TABLE incidents ADD COLUMN IF NOT EXISTS manual_fix_by VARCHAR(100); -- ============================================================================ -- Step 3: 驗收查詢(執行後確認欄位存在) -- ============================================================================ -- 確認 incidents 新欄位 SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'incidents' AND column_name IN ( 'notification_type', 'alert_category', 'context_bundle', 'metrics_before', 'metrics_after', 'verification_result', 'manual_fix_steps', 'manual_fix_by' ) ORDER BY column_name; -- 確認 alert_event_type 新值 SELECT enumlabel FROM pg_enum JOIN pg_type ON pg_enum.enumtypid = pg_type.oid WHERE pg_type.typname = 'alert_event_type' AND enumlabel IN ( 'NOTIFICATION_CLASSIFIED', 'MANUAL_FIX_RECORDED', 'KM_CONVERTED', 'PLAYBOOK_DRAFT_CREATED', 'STATE_GUARD_BLOCKED' ) ORDER BY enumlabel;