106 lines
3.0 KiB
JavaScript
106 lines
3.0 KiB
JavaScript
const { PrismaClient } = require("@prisma/client");
|
||
|
||
const prisma = new PrismaClient();
|
||
|
||
async function addMissingColumns() {
|
||
try {
|
||
console.log("🔄 누락된 컬럼들을 screen_layouts 테이블에 추가 중...");
|
||
|
||
// layout_type 컬럼 추가
|
||
try {
|
||
await prisma.$executeRaw`
|
||
ALTER TABLE screen_layouts
|
||
ADD COLUMN IF NOT EXISTS layout_type VARCHAR(50);
|
||
`;
|
||
console.log("✅ layout_type 컬럼 추가 완료");
|
||
} catch (error) {
|
||
console.log(
|
||
"ℹ️ layout_type 컬럼이 이미 존재하거나 추가 중 오류:",
|
||
error.message
|
||
);
|
||
}
|
||
|
||
// layout_config 컬럼 추가
|
||
try {
|
||
await prisma.$executeRaw`
|
||
ALTER TABLE screen_layouts
|
||
ADD COLUMN IF NOT EXISTS layout_config JSONB;
|
||
`;
|
||
console.log("✅ layout_config 컬럼 추가 완료");
|
||
} catch (error) {
|
||
console.log(
|
||
"ℹ️ layout_config 컬럼이 이미 존재하거나 추가 중 오류:",
|
||
error.message
|
||
);
|
||
}
|
||
|
||
// zones_config 컬럼 추가
|
||
try {
|
||
await prisma.$executeRaw`
|
||
ALTER TABLE screen_layouts
|
||
ADD COLUMN IF NOT EXISTS zones_config JSONB;
|
||
`;
|
||
console.log("✅ zones_config 컬럼 추가 완료");
|
||
} catch (error) {
|
||
console.log(
|
||
"ℹ️ zones_config 컬럼이 이미 존재하거나 추가 중 오류:",
|
||
error.message
|
||
);
|
||
}
|
||
|
||
// zone_id 컬럼 추가
|
||
try {
|
||
await prisma.$executeRaw`
|
||
ALTER TABLE screen_layouts
|
||
ADD COLUMN IF NOT EXISTS zone_id VARCHAR(100);
|
||
`;
|
||
console.log("✅ zone_id 컬럼 추가 완료");
|
||
} catch (error) {
|
||
console.log(
|
||
"ℹ️ zone_id 컬럼이 이미 존재하거나 추가 중 오류:",
|
||
error.message
|
||
);
|
||
}
|
||
|
||
// 인덱스 생성 (성능 향상)
|
||
try {
|
||
await prisma.$executeRaw`
|
||
CREATE INDEX IF NOT EXISTS idx_screen_layouts_layout_type
|
||
ON screen_layouts(layout_type);
|
||
`;
|
||
console.log("✅ layout_type 인덱스 생성 완료");
|
||
} catch (error) {
|
||
console.log("ℹ️ layout_type 인덱스 생성 중 오류:", error.message);
|
||
}
|
||
|
||
try {
|
||
await prisma.$executeRaw`
|
||
CREATE INDEX IF NOT EXISTS idx_screen_layouts_zone_id
|
||
ON screen_layouts(zone_id);
|
||
`;
|
||
console.log("✅ zone_id 인덱스 생성 완료");
|
||
} catch (error) {
|
||
console.log("ℹ️ zone_id 인덱스 생성 중 오류:", error.message);
|
||
}
|
||
|
||
// 최종 테이블 구조 확인
|
||
const columns = await prisma.$queryRaw`
|
||
SELECT column_name, data_type, is_nullable, column_default
|
||
FROM information_schema.columns
|
||
WHERE table_name = 'screen_layouts'
|
||
ORDER BY ordinal_position
|
||
`;
|
||
|
||
console.log("\n📋 screen_layouts 테이블 최종 구조:");
|
||
console.table(columns);
|
||
|
||
console.log("\n🎉 모든 누락된 컬럼 추가 작업이 완료되었습니다!");
|
||
} catch (error) {
|
||
console.error("❌ 컬럼 추가 중 오류 발생:", error);
|
||
} finally {
|
||
await prisma.$disconnect();
|
||
}
|
||
}
|
||
|
||
addMissingColumns();
|