main_db3 마이그레이션 계획 문서 작성
- 614개 레코드 마이그레이션 계획 - 테이블 매핑 및 변환 규칙 정의 - 4단계 순차 실행 계획 - SQL 스크립트 포함
This commit is contained in:
parent
96b216932a
commit
7b2bba49f9
109
300_architecture/plans/250911_main_db3_migration_plan.md
Normal file
109
300_architecture/plans/250911_main_db3_migration_plan.md
Normal file
@ -0,0 +1,109 @@
|
||||
# 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로 이동 예정
|
||||
- **실행 시간**: 새벽 시간대 권장 (서비스 영향 최소화)
|
||||
Loading…
x
Reference in New Issue
Block a user