import dotenv from 'dotenv'; import { createClient } from '@supabase/supabase-js'; dotenv.config(); const cloudUrl = process.env.CLOUD_SUPABASE_URL; // 서비스 역할 키가 유효하지 않으면 CLOUD_SUPABASE_ANON_KEY 또는 VITE_SUPABASE_ANON_KEY를 사용합니다. const cloudKey = process.env.CLOUD_SUPABASE_SERVICE_ROLE_KEY || process.env.CLOUD_SUPABASE_ANON_KEY || process.env.VITE_SUPABASE_ANON_KEY; const onpremUrl = process.env.ONPREM_SUPABASE_URL; // 서비스 역할 키가 유효하지 않으면 ONPREM_SUPABASE_ANON_KEY 또는 VITE_SUPABASE_ANON_KEY를 사용합니다. const onpremKey = process.env.ONPREM_SUPABASE_SERVICE_ROLE_KEY || process.env.ONPREM_SUPABASE_ANON_KEY || process.env.VITE_SUPABASE_ANON_KEY; if (!cloudUrl || !cloudKey || !onpremUrl || !onpremKey) { console.error('환경 변수가 설정되지 않았습니다. .env 파일을 확인하세요.'); process.exit(1); } const cloud = createClient(cloudUrl, cloudKey); const onprem = createClient(onpremUrl, onpremKey); // 복사할 테이블 목록을 정의하세요. const tables = [ 'users', 'accounts', 'transactions', // 필요에 따라 추가 테이블을 여기에 입력 ]; async function migrateTable(table: string) { console.log(`Migrating table: ${table}`); const { data, error } = await cloud.from(table).select('*'); if (error) { // 테이블이 없으면 스킵 if (error.code === '42P01') { console.warn(`Table ${table} not found in Cloud DB, skipping.`); return; } console.error(`Error fetching ${table}:`, error); return; } if (!data || data.length === 0) { console.log(`${table} has no data to migrate.`); return; } const { error: insertError } = await onprem.from(table).upsert(data); if (insertError) { console.error(`Error inserting into ${table}:`, insertError); } else { console.log(`Migrated ${data.length} rows into ${table}`); } } async function main() { for (const table of tables) { await migrateTable(table); } console.log('Migration complete.'); } main().catch(err => { console.error('Migration failed:', err); process.exit(1); });