147 lines
3.8 KiB
Markdown
147 lines
3.8 KiB
Markdown
|
|
# 마이그레이션 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" 에러
|
||
|
|
→ 이미 실행됨. 무시하고 진행 가능
|
||
|
|
|