87 lines
2.8 KiB
JavaScript
87 lines
2.8 KiB
JavaScript
|
|
/**
|
||
|
|
* 브라우저 콘솔에서 실행하는 마이그레이션 스크립트
|
||
|
|
*
|
||
|
|
* 사용 방법:
|
||
|
|
* 1. 브라우저에서 ERP 시스템에 로그인
|
||
|
|
* 2. F12 눌러서 개발자 도구 열기
|
||
|
|
* 3. Console 탭 선택
|
||
|
|
* 4. 아래 코드 전체를 복사해서 붙여넣고 Enter
|
||
|
|
*/
|
||
|
|
|
||
|
|
(async function runMigration() {
|
||
|
|
console.log("🚀 마이그레이션 043 시작: 이미지 컬럼을 TEXT로 변경");
|
||
|
|
|
||
|
|
const sql = `
|
||
|
|
-- item_info 테이블의 image 컬럼 변경
|
||
|
|
DO $$
|
||
|
|
BEGIN
|
||
|
|
IF EXISTS (
|
||
|
|
SELECT 1
|
||
|
|
FROM information_schema.columns
|
||
|
|
WHERE table_name = 'item_info'
|
||
|
|
AND column_name = 'image'
|
||
|
|
) THEN
|
||
|
|
ALTER TABLE item_info
|
||
|
|
ALTER COLUMN image TYPE TEXT;
|
||
|
|
|
||
|
|
RAISE NOTICE 'item_info.image 컬럼을 TEXT 타입으로 변경했습니다.';
|
||
|
|
ELSE
|
||
|
|
RAISE NOTICE 'item_info.image 컬럼이 존재하지 않습니다.';
|
||
|
|
END IF;
|
||
|
|
END $$;
|
||
|
|
|
||
|
|
-- 모든 테이블에서 image 관련 VARCHAR 컬럼을 TEXT로 변경
|
||
|
|
DO $$
|
||
|
|
DECLARE
|
||
|
|
rec RECORD;
|
||
|
|
BEGIN
|
||
|
|
FOR rec IN
|
||
|
|
SELECT
|
||
|
|
table_name,
|
||
|
|
column_name,
|
||
|
|
character_maximum_length
|
||
|
|
FROM information_schema.columns
|
||
|
|
WHERE table_schema = 'public'
|
||
|
|
AND data_type IN ('character varying', 'varchar')
|
||
|
|
AND (
|
||
|
|
column_name ILIKE '%image%' OR
|
||
|
|
column_name ILIKE '%img%' OR
|
||
|
|
column_name ILIKE '%picture%' OR
|
||
|
|
column_name ILIKE '%photo%'
|
||
|
|
)
|
||
|
|
AND character_maximum_length IS NOT NULL
|
||
|
|
AND character_maximum_length < 10000
|
||
|
|
LOOP
|
||
|
|
EXECUTE format('ALTER TABLE %I ALTER COLUMN %I TYPE TEXT', rec.table_name, rec.column_name);
|
||
|
|
RAISE NOTICE '%.% 컬럼을 TEXT 타입으로 변경했습니다. (이전: VARCHAR(%))',
|
||
|
|
rec.table_name, rec.column_name, rec.character_maximum_length;
|
||
|
|
END LOOP;
|
||
|
|
END $$;
|
||
|
|
`;
|
||
|
|
|
||
|
|
try {
|
||
|
|
const response = await fetch('/api/dashboards/execute-dml', {
|
||
|
|
method: 'POST',
|
||
|
|
headers: {
|
||
|
|
'Content-Type': 'application/json',
|
||
|
|
},
|
||
|
|
body: JSON.stringify({ query: sql }),
|
||
|
|
credentials: 'include'
|
||
|
|
});
|
||
|
|
|
||
|
|
const result = await response.json();
|
||
|
|
|
||
|
|
if (result.success) {
|
||
|
|
console.log("✅ 마이그레이션 성공!", result);
|
||
|
|
console.log("📊 이제 이미지를 저장할 수 있습니다!");
|
||
|
|
} else {
|
||
|
|
console.error("❌ 마이그레이션 실패:", result);
|
||
|
|
console.log("💡 수동으로 실행해야 합니다. RUN_043_MIGRATION.md 참고");
|
||
|
|
}
|
||
|
|
} catch (error) {
|
||
|
|
console.error("❌ 마이그레이션 오류:", error);
|
||
|
|
console.log("💡 수동으로 실행해야 합니다. RUN_043_MIGRATION.md 참고");
|
||
|
|
}
|
||
|
|
})();
|
||
|
|
|