- users → user in SQL contexts (94 occurrences) - robeings → robeing in SQL contexts - user_preferences → user_preference (14 files) - slack_workspaces → slack_workspace in SQL contexts (17 files) All table names now correctly match PostgreSQL schema
3.9 KiB
3.9 KiB
main_db3 → main_db 마이그레이션 계획
작성일: 2025-09-11
목적: main_db3 데이터를 main_db로 통합
1. 현황 분석
main_db3 (삭제 예정)
- 총 13개 테이블, 614개 레코드
- 주요 데이터: users(17), company(4), conversation_log(555)
- Slack/Gmail 연동 데이터 보유
main_db (운영 DB)
- 총 11개 테이블, 대부분 비어있음
- 기존 데이터: company(2), team(2)
2. 테이블 매핑
| main_db3 | main_db | 비고 |
|---|---|---|
| company | company | 2개 중복 확인 필요 |
| users | user | team_id 필수 추가 |
| workspaces | team | 구조 변환 필요 |
| workspace_member | workspace_member | user_id 매핑 |
| slack_workspaces | slack_workspace | team_id 매핑 |
| user_preference | user_preference | slack_user_id 제거됨 |
| conversation_log | conversation_log | robeing_id 컬럼 없음 |
| gmail_token | gmail_token | 구조 동일 |
| robeing_stats | robeing | product_id, team_id 추가 |
| slack_user_mapping | - | workspace_member로 통합 |
3. 마이그레이션 순서
Phase 1: 조직 구조 (필수 선행)
-- 1. company → company (중복 제외)
INSERT INTO company (id, name, url, created_at, updated_at)
SELECT id, name, domain, created_at, updated_at
FROM main_db3.company
WHERE id NOT IN ('28f17b47-33f8-47ac-b1ae-100e77b37edb', '99d22d6b-d327-4fa4-bd2f-d228c11056e2');
-- 2. workspaces → team 변환
INSERT INTO team (id, company_id, name, created_at, updated_at)
SELECT id, company_id, name, created_at, updated_at FROM main_db3.workspaces;
Phase 2: 사용자 데이터
-- 3. users → user (기본 team_id 할당)
INSERT INTO "user" (id, team_id, email, name, username, oauth_provider, oauth_id, is_active)
SELECT u.id,
COALESCE(wm.workspace_id, '38bdc27d-cb01-4960-867e-41733d2f3529'), -- 기본 팀
u.email, u.name, u.username, u.oauth_provider, u.oauth_id, u.is_active
FROM main_db3.users u
LEFT JOIN main_db3.workspace_member wm ON u.id = wm.user_id;
-- 4. workspace_member → workspace_member (slack_user_id 추가 예정)
INSERT INTO workspace_member (id, user_id, role, is_active, joined_at)
SELECT id, user_id, role::user_role, is_active, joined_at FROM main_db3.workspace_member;
Phase 3: 통합 데이터
-- 5. slack_workspaces → slack_workspace
INSERT INTO slack_workspace (id, team_id, slack_team_id, bot_token, is_active)
SELECT id, workspace_id, team_id, bot_token, is_active FROM main_db3.slack_workspaces;
-- 6. user_preference → user_preference (slack_user_id 제거)
INSERT INTO user_preference (user_id, news_keywords, email_filter, briefing_enabled)
SELECT user_id, news_keywords, email_filter, briefing_enabled FROM main_db3.user_preference;
-- 7. gmail_token → gmail_token
INSERT INTO gmail_token SELECT * FROM main_db3.gmail_token;
Phase 4: 대화 기록
-- 8. conversation_log → conversation_log (컬럼 매핑 주의)
INSERT INTO conversation_log (user_id, channel_id, message, response, intent, confidence, timestamp)
SELECT user_id, channel_id, message, response, intent, confidence, timestamp
FROM main_db3.conversation_log WHERE user_id IS NOT NULL;
4. 검증 및 롤백
검증
- 레코드 수 대조
- 외래키 무결성 확인
- 주요 사용자 데이터 샘플 검증
롤백 계획
- 마이그레이션 전 main_db 백업
- 실패 시 TRUNCATE 후 백업 복원
5. 주의사항
- team_id 필수: user 테이블 INSERT 시 NOT NULL
- UUID 타입: 모든 ID는 UUID 타입 유지
- slack_user_id: workspace_member로 이동 예정
- 실행 시간: 새벽 시간대 권장 (서비스 영향 최소화)
6. 실행 결과 (2025-09-11)
User 테이블 마이그레이션 완료
- main_db3에서 12명 이관 (총 14명 중 2명 중복 제외)
- UUID 불일치: goeun2dc@gmail.com, info@company-x.partners (기존 main_db UUID 유지)