Add migration script for Cloud to On-Prem
This commit is contained in:
63
src/lib/migrateData.ts
Normal file
63
src/lib/migrateData.ts
Normal file
@@ -0,0 +1,63 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user