86 lines
2.6 KiB
SQL
86 lines
2.6 KiB
SQL
-- =============================================================================
|
||
-- Migration 036: normalize incidents legacy/current columns
|
||
-- 日期: 2026-05-12 台北
|
||
-- =============================================================================
|
||
-- 背景:
|
||
-- migration 013 建立 incidents.error_traceback / playbook_id / resolved_at;
|
||
-- 後續 ORM 改用 traceback_str / matched_playbook_id。migration 031 已加新欄位,
|
||
-- 但 create_all-only 舊環境可能缺 legacy 欄位,且新寫入只更新新欄位。
|
||
--
|
||
-- 設計:
|
||
-- 1. 保留雙欄做向下相容,不做破壞性 drop/rename。
|
||
-- 2. 補齊缺欄,並用 COALESCE 雙向回填,讓分析查詢可安全 coalesce。
|
||
-- 3. 補 playbook_id FK 與 matched_playbook_id FK;已存在則略過。
|
||
-- =============================================================================
|
||
|
||
ALTER TABLE IF EXISTS incidents
|
||
ADD COLUMN IF NOT EXISTS error_traceback TEXT;
|
||
|
||
ALTER TABLE IF EXISTS incidents
|
||
ADD COLUMN IF NOT EXISTS traceback_str TEXT;
|
||
|
||
ALTER TABLE IF EXISTS incidents
|
||
ADD COLUMN IF NOT EXISTS playbook_id INTEGER;
|
||
|
||
ALTER TABLE IF EXISTS incidents
|
||
ADD COLUMN IF NOT EXISTS matched_playbook_id INTEGER;
|
||
|
||
ALTER TABLE IF EXISTS incidents
|
||
ADD COLUMN IF NOT EXISTS resolved_at TIMESTAMP;
|
||
|
||
ALTER TABLE IF EXISTS incidents
|
||
ALTER COLUMN severity TYPE VARCHAR(20);
|
||
|
||
UPDATE incidents
|
||
SET traceback_str = error_traceback
|
||
WHERE traceback_str IS NULL
|
||
AND error_traceback IS NOT NULL;
|
||
|
||
UPDATE incidents
|
||
SET error_traceback = traceback_str
|
||
WHERE error_traceback IS NULL
|
||
AND traceback_str IS NOT NULL;
|
||
|
||
UPDATE incidents
|
||
SET matched_playbook_id = playbook_id
|
||
WHERE matched_playbook_id IS NULL
|
||
AND playbook_id IS NOT NULL;
|
||
|
||
UPDATE incidents
|
||
SET playbook_id = matched_playbook_id
|
||
WHERE playbook_id IS NULL
|
||
AND matched_playbook_id IS NOT NULL;
|
||
|
||
DO $$
|
||
BEGIN
|
||
IF NOT EXISTS (
|
||
SELECT 1
|
||
FROM pg_constraint
|
||
WHERE conname = 'incidents_playbook_id_fkey'
|
||
) THEN
|
||
ALTER TABLE incidents
|
||
ADD CONSTRAINT incidents_playbook_id_fkey
|
||
FOREIGN KEY (playbook_id)
|
||
REFERENCES playbooks(id);
|
||
END IF;
|
||
|
||
IF NOT EXISTS (
|
||
SELECT 1
|
||
FROM pg_constraint
|
||
WHERE conname = 'incidents_matched_playbook_id_fkey'
|
||
) THEN
|
||
ALTER TABLE incidents
|
||
ADD CONSTRAINT incidents_matched_playbook_id_fkey
|
||
FOREIGN KEY (matched_playbook_id)
|
||
REFERENCES playbooks(id);
|
||
END IF;
|
||
END $$;
|
||
|
||
CREATE INDEX IF NOT EXISTS idx_incidents_matched_playbook_id
|
||
ON incidents(matched_playbook_id);
|
||
|
||
DO $$
|
||
BEGIN
|
||
RAISE NOTICE 'Migration 036 done: incidents legacy/current columns normalized';
|
||
END $$;
|