-- 수신함 추가 정보 필드 추가 -- 원인부서, 해당자, 원인 상세 정보를 기록하기 위한 필드들 DO $migration$ DECLARE col_count INTEGER := 0; idx_count INTEGER := 0; BEGIN RAISE NOTICE '=== 수신함 추가 정보 필드 추가 마이그레이션 시작 ==='; -- 1. 해당자 상세 정보 (responsible_person과 별도) IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'issues' AND column_name = 'responsible_person_detail') THEN ALTER TABLE issues ADD COLUMN responsible_person_detail VARCHAR(200); RAISE NOTICE '✅ issues.responsible_person_detail 컬럼이 추가되었습니다.'; ELSE RAISE NOTICE 'ℹ️ issues.responsible_person_detail 컬럼이 이미 존재합니다.'; END IF; -- 2. 원인 상세 정보 (기록용) IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'issues' AND column_name = 'cause_detail') THEN ALTER TABLE issues ADD COLUMN cause_detail TEXT; RAISE NOTICE '✅ issues.cause_detail 컬럼이 추가되었습니다.'; ELSE RAISE NOTICE 'ℹ️ issues.cause_detail 컬럼이 이미 존재합니다.'; END IF; -- 3. 추가 정보 입력 시간 (언제 입력되었는지 기록) IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'issues' AND column_name = 'additional_info_updated_at') THEN ALTER TABLE issues ADD COLUMN additional_info_updated_at TIMESTAMP WITH TIME ZONE; RAISE NOTICE '✅ issues.additional_info_updated_at 컬럼이 추가되었습니다.'; ELSE RAISE NOTICE 'ℹ️ issues.additional_info_updated_at 컬럼이 이미 존재합니다.'; END IF; -- 4. 추가 정보 입력자 ID (누가 입력했는지 기록) IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'issues' AND column_name = 'additional_info_updated_by_id') THEN ALTER TABLE issues ADD COLUMN additional_info_updated_by_id INTEGER REFERENCES users(id); RAISE NOTICE '✅ issues.additional_info_updated_by_id 컬럼이 추가되었습니다.'; ELSE RAISE NOTICE 'ℹ️ issues.additional_info_updated_by_id 컬럼이 이미 존재합니다.'; END IF; -- 인덱스 추가 (검색 성능 향상) IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'issues' AND indexname = 'idx_issues_additional_info_updated_at') THEN CREATE INDEX idx_issues_additional_info_updated_at ON issues (additional_info_updated_at); RAISE NOTICE '✅ idx_issues_additional_info_updated_at 인덱스가 생성되었습니다.'; ELSE RAISE NOTICE 'ℹ️ idx_issues_additional_info_updated_at 인덱스가 이미 존재합니다.'; END IF; -- 검증 SELECT COUNT(*) INTO col_count FROM information_schema.columns WHERE table_name = 'issues' AND column_name IN ( 'responsible_person_detail', 'cause_detail', 'additional_info_updated_at', 'additional_info_updated_by_id' ); SELECT COUNT(*) INTO idx_count FROM pg_indexes WHERE tablename = 'issues' AND indexname = 'idx_issues_additional_info_updated_at'; RAISE NOTICE '=== 마이그레이션 검증 결과 ==='; RAISE NOTICE '추가된 컬럼: %/4개', col_count; RAISE NOTICE '생성된 인덱스: %/1개', idx_count; IF col_count = 4 AND idx_count = 1 THEN RAISE NOTICE '✅ 모든 추가 정보 필드가 성공적으로 추가되었습니다.'; ELSE RAISE WARNING '⚠️ 일부 필드나 인덱스가 누락되었습니다.'; END IF; EXCEPTION WHEN OTHERS THEN RAISE EXCEPTION '❌ 마이그레이션 실행 중 오류 발생: %', SQLERRM; END $migration$; -- 마이그레이션 로그 기록 INSERT INTO migration_log (migration_file, executed_at, status, notes) VALUES ( '018_add_additional_info_fields.sql', NOW(), 'SUCCESS', '수신함 추가 정보 필드 추가: 해당자 상세(responsible_person_detail), 원인 상세(cause_detail), 입력 시간/입력자 추적 필드' ) ON CONFLICT (migration_file) DO UPDATE SET executed_at = NOW(), status = EXCLUDED.status, notes = EXCLUDED.notes;