ERP-node/db/migrations/run_043_from_browser.js

87 lines
2.8 KiB
JavaScript
Raw Normal View History

/**
* 브라우저 콘솔에서 실행하는 마이그레이션 스크립트
*
* 사용 방법:
* 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 참고");
}
})();