Files
ewoooc/migrations/036_normalize_incidents_dual_columns.sql
OoO caa6263872
All checks were successful
CD Pipeline / deploy (push) Successful in 56s
同步 incidents 相容欄位寫入
2026-05-12 23:31:33 +08:00

86 lines
2.6 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =============================================================================
-- 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 $$;