117 lines
3.9 KiB
Markdown
117 lines
3.9 KiB
Markdown
# main_db3 → main_db 마이그레이션 계획
|
|
|
|
## 작성일: 2025-09-11
|
|
## 목적: main_db3 데이터를 main_db로 통합
|
|
|
|
---
|
|
|
|
## 1. 현황 분석
|
|
|
|
### main_db3 (삭제 예정)
|
|
- 총 13개 테이블, 614개 레코드
|
|
- 주요 데이터: users(17), companies(4), conversation_logs(555)
|
|
- Slack/Gmail 연동 데이터 보유
|
|
|
|
### main_db (운영 DB)
|
|
- 총 11개 테이블, 대부분 비어있음
|
|
- 기존 데이터: company(2), team(2)
|
|
|
|
---
|
|
|
|
## 2. 테이블 매핑
|
|
|
|
| main_db3 | main_db | 비고 |
|
|
|----------|---------|------|
|
|
| companies | company | 2개 중복 확인 필요 |
|
|
| users | user | team_id 필수 추가 |
|
|
| workspaces | team | 구조 변환 필요 |
|
|
| workspace_members | workspace_member | user_id 매핑 |
|
|
| slack_workspaces | slack_workspace | team_id 매핑 |
|
|
| user_preferences | user_preference | slack_user_id 제거됨 |
|
|
| conversation_logs | conversation_log | robeing_id 컬럼 없음 |
|
|
| gmail_tokens | gmail_token | 구조 동일 |
|
|
| robeing_stats | robeing | product_id, team_id 추가 |
|
|
| slack_user_mapping | - | workspace_member로 통합 |
|
|
|
|
---
|
|
|
|
## 3. 마이그레이션 순서
|
|
|
|
### Phase 1: 조직 구조 (필수 선행)
|
|
```sql
|
|
-- 1. companies → company (중복 제외)
|
|
INSERT INTO company (id, name, url, created_at, updated_at)
|
|
SELECT id, name, domain, created_at, updated_at
|
|
FROM main_db3.companies
|
|
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: 사용자 데이터
|
|
```sql
|
|
-- 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_members wm ON u.id = wm.user_id;
|
|
|
|
-- 4. workspace_members → 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_members;
|
|
```
|
|
|
|
### Phase 3: 통합 데이터
|
|
```sql
|
|
-- 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_preferences → 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_preferences;
|
|
|
|
-- 7. gmail_tokens → gmail_token
|
|
INSERT INTO gmail_token SELECT * FROM main_db3.gmail_tokens;
|
|
```
|
|
|
|
### Phase 4: 대화 기록
|
|
```sql
|
|
-- 8. conversation_logs → 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_logs 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 유지) |