ERP-node/db/migrations/RUN_MIGRATION_1003.md

147 lines
3.8 KiB
Markdown
Raw Permalink Normal View History

# 마이그레이션 1003 실행 가이드
## ❌ 현재 에러
```
column "source_menu_objid" does not exist
```
**원인**: `menu_info` 테이블에 `source_menu_objid` 컬럼이 아직 추가되지 않음
## ✅ 해결 방법
### 방법 1: psql 직접 실행 (권장)
```bash
# 1. PostgreSQL 접속 정보 확인
# - Host: localhost (또는 실제 DB 호스트)
# - Port: 5432 (기본값)
# - Database: ilshin
# - User: postgres
# 2. 마이그레이션 실행
cd /Users/kimjuseok/ERP-node
psql -h localhost -U postgres -d ilshin -f db/migrations/1003_add_source_menu_objid_to_menu_info.sql
# 또는 대화형으로
psql -h localhost -U postgres -d ilshin
# 그 다음 파일 내용 붙여넣기
```
### 방법 2: DBeaver / pgAdmin에서 실행
1. DBeaver 또는 pgAdmin 실행
2. `ilshin` 데이터베이스 연결
3. SQL 편집기 열기
4. 아래 SQL 복사하여 실행:
```sql
-- source_menu_objid 컬럼 추가
ALTER TABLE menu_info
ADD COLUMN IF NOT EXISTS source_menu_objid BIGINT;
-- 인덱스 생성 (검색 성능 향상)
CREATE INDEX IF NOT EXISTS idx_menu_info_source_menu_objid
ON menu_info(source_menu_objid);
-- 복합 인덱스: 회사별 원본 메뉴 검색
CREATE INDEX IF NOT EXISTS idx_menu_info_source_company
ON menu_info(source_menu_objid, company_code);
-- 컬럼 설명 추가
COMMENT ON COLUMN menu_info.source_menu_objid IS '원본 메뉴 ID (복사된 경우만 값 존재)';
-- 확인
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_name = 'menu_info'
AND column_name = 'source_menu_objid';
```
### 방법 3: Docker를 통한 실행
Docker Compose 설정 확인 후:
```bash
# Docker Compose에 DB 서비스가 있는 경우
docker-compose exec db psql -U postgres -d ilshin -f /path/to/migration.sql
# 또는 SQL을 직접 실행
docker-compose exec db psql -U postgres -d ilshin -c "
ALTER TABLE menu_info ADD COLUMN IF NOT EXISTS source_menu_objid BIGINT;
CREATE INDEX IF NOT EXISTS idx_menu_info_source_menu_objid ON menu_info(source_menu_objid);
CREATE INDEX IF NOT EXISTS idx_menu_info_source_company ON menu_info(source_menu_objid, company_code);
"
```
## ✅ 실행 후 확인
### 1. 컬럼이 추가되었는지 확인
```sql
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_name = 'menu_info'
AND column_name = 'source_menu_objid';
```
**예상 결과**:
```
column_name | data_type | is_nullable
-------------------|-----------|-------------
source_menu_objid | bigint | YES
```
### 2. 인덱스 확인
```sql
SELECT indexname
FROM pg_indexes
WHERE tablename = 'menu_info'
AND indexname LIKE '%source%';
```
**예상 결과**:
```
indexname
---------------------------------
idx_menu_info_source_menu_objid
idx_menu_info_source_company
```
### 3. 메뉴 복사 재시도
마이그레이션 완료 후 프론트엔드에서 메뉴 복사를 다시 실행하세요.
## 🔍 DB 접속 정보 찾기
### 환경 변수 확인
```bash
# .env 파일 확인
cat backend-node/.env | grep DB
# Docker Compose 확인
cat docker-compose*.yml | grep -A 10 postgres
```
### 일반적인 접속 정보
- **Host**: localhost 또는 127.0.0.1
- **Port**: 5432 (기본값)
- **Database**: ilshin
- **User**: postgres
- **Password**: (환경 설정 파일에서 확인)
## ⚠️ 주의사항
1. **백업 권장**: 마이그레이션 실행 전 DB 백업 권장
2. **권한 확인**: ALTER TABLE 권한이 필요합니다
3. **백엔드 재시작 불필요**: 컬럼 추가만으로 즉시 작동합니다
## 📞 문제 해결
### "permission denied" 에러
→ postgres 사용자 또는 superuser 권한으로 실행 필요
### "relation does not exist" 에러
→ 올바른 데이터베이스(ilshin)에 접속했는지 확인
### "already exists" 에러
→ 이미 실행됨. 무시하고 진행 가능