b5bc7f3630
E-BOM 조회 트리 화면 검증용 긴 BOM 1건을 운영DB 에서 RPS 로 복사 (1회성).
선정 기준 : bom_part_qty 행 수 + 트리 깊이 큼.
대상 BOM : part_bom_report.objid = '1038014721'
part_no = '21008-0109' / part_name = 'BS030-120H4A11-EN'
구조 : 126 행 / 4 레벨 (L1=1 / L2=37 / L3=62 / L4=26)
파일:
- 03_long_bom_sample.sql : TEMP staging + ON CONFLICT DO NOTHING INSERT
· pbr_stage / bpq_stage 두 TEMP 테이블에 \copy 로 적재 후 INSERT FROM SELECT
· 재실행 안전 (ON CONFLICT 시 skip)
- pbr_long.csv : part_bom_report 1행 (운영DB export, CSV HEADER)
- bpq_long.csv : bom_part_qty 126행 (운영DB export, CSV HEADER, seq ORDER BY)
- README.md : 02_sequences.sql / 03_long_bom_sample.sql 섹션 추가
용도:
- 동적 LEVEL 컬럼 (L1..L4) "*" 표시 검증
- 토글 -/+ 버튼 동작 검증 (자식 보유 행 식별 + 자손 hide 체인)
- search_level 1~5 필터 검증
- 정전개 엑셀 다운로드 검증
운영DB OBJID 그대로 사용 — RPS part_mng 가 운영DB와 동일 OBJID 보유 (이전 part_mng_sync
로 보장) 라서 PART 정보 매핑 정상.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
103 lines
4.3 KiB
Markdown
103 lines
4.3 KiB
Markdown
# 개발관리 데이터 동기화 스크립트
|
|
|
|
운영DB(`211.115.91.141:11133/waceplm`) → RPS DB(`11134/vexplor_rps`)로 마이그레이션 시 누락된 데이터를 part_no 매칭으로 채워 넣는 1회성 스크립트 모음.
|
|
|
|
테이블 DDL/스키마는 [../ddl-extracted/](../ddl-extracted/)에서 별도 관리. 본 디렉토리는 **데이터 row 동기화** 전용.
|
|
|
|
---
|
|
|
|
## 01_part_mng_sync.sql
|
|
|
|
**대상**: `part_mng` 8,176건 — 운영DB에서 채워져 있던 컬럼이 RPS 마이그레이션 시 누락된 사례.
|
|
|
|
**왜 필요했나**: 2026-05-12 PART 상세 다이얼로그 검증 중 발견. 품번/품명만 표시되고 재료/규격/계정구분/조달구분/재고단위/관리단위/환산수량/LOT구분/사용여부/검사여부/SET품여부/의뢰여부 등 거의 모든 컬럼이 NULL. 운영DB 같은 part_no는 정상적으로 채워져 있어서 마이그레이션 누락이 원인.
|
|
|
|
**동기화 대상 컬럼 20개**:
|
|
|
|
- 재료/형상: `material` / `heat_treatment_hardness` / `heat_treatment_method` / `surface_treatment`
|
|
- 기본: `maker` / `part_type` / `spec`
|
|
- ERP 분류: `acctfg` / `odrfg` / `unit_dc` / `unitmang_dc` / `unitchng_nb`
|
|
- Y/N: `lot_fg` / `use_yn` / `qc_fg` / `setitem_fg` / `req_fg`
|
|
- 단위: `unit_length` / `unit_qty`
|
|
- 상태: `is_last` (마이그레이션 시 NULL이라 PART_MNG.is_last='1' 조건의 모든 매퍼 쿼리가 0건 반환되던 부수 문제도 함께 수정)
|
|
|
|
**실행 절차**:
|
|
|
|
```bash
|
|
# 1) 운영DB → CSV export (is_last='1' 인 8,243건)
|
|
PGPASSWORD='waceplm0909!!' psql -h 211.115.91.141 -p 11133 -U postgres -d waceplm -c "\copy (SELECT part_no, COALESCE(material,''), COALESCE(heat_treatment_hardness,''), ..., COALESCE(unit_qty::text,'') FROM part_mng WHERE is_last='1') TO '/tmp/part_mng_sync.csv' WITH CSV HEADER"
|
|
|
|
# 2) RPS 에 import + UPDATE FROM JOIN
|
|
PGPASSWORD='vexplor0909!!' psql -h 211.115.91.141 -p 11134 -U postgres -d vexplor_rps -f 01_part_mng_sync.sql
|
|
```
|
|
|
|
**결과 (2026-05-12 실행)**:
|
|
|
|
| 컬럼 | 동기화 전 | 동기화 후 |
|
|
|---|---:|---:|
|
|
| material | 0 | 301 |
|
|
| acctfg | 0 | 8,172 |
|
|
| unit_dc | 0 | 8,176 |
|
|
| part_type | 639 | 703 |
|
|
| spec | 0 | 7,466 |
|
|
| is_last | 0 | 8,176 |
|
|
| (전체) | 8,176 | 8,176 |
|
|
|
|
**미동기화 (의도적 보류)**: 운영DB에만 있는 67건 (운영 8,243 - RPS 8,176). part_no 자체가 RPS 에 미존재. 신규 INSERT 별 작업 필요.
|
|
|
|
**검증 SQL**:
|
|
|
|
```sql
|
|
-- 채움 비율
|
|
SELECT
|
|
COUNT(*) AS total,
|
|
COUNT(NULLIF(material,'')) AS material_filled,
|
|
COUNT(NULLIF(acctfg,'')) AS acctfg_filled,
|
|
COUNT(NULLIF(unit_dc,'')) AS unit_dc_filled,
|
|
COUNT(NULLIF(part_type,'')) AS part_type_filled,
|
|
COUNT(NULLIF(spec,'')) AS spec_filled,
|
|
COUNT(NULLIF(is_last,'')) AS is_last_filled
|
|
FROM part_mng;
|
|
|
|
-- 샘플 행 (운영 스크린샷과 비교)
|
|
SELECT part_no, material, spec, part_type, acctfg, odrfg, unit_dc, unitmang_dc,
|
|
unitchng_nb, lot_fg, use_yn, qc_fg, setitem_fg, req_fg
|
|
FROM part_mng WHERE part_no = '000AN003000';
|
|
```
|
|
|
|
**1:1 정합성**: 운영DB의 컬럼 값을 그대로 복사. NULL 인 운영 컬럼은 RPS 도 NULL 유지 (덮어쓰기 안 함). `unitchng_nb` 만 numeric 캐스팅.
|
|
|
|
**재실행 안전**: idempotent — 같은 데이터로 다시 UPDATE 만 일어남.
|
|
|
|
---
|
|
|
|
## 02_sequences.sql
|
|
|
|
wace 매퍼에서 쓰는 시퀀스 5종 중 RPS 에 없던 4종 신규 생성 + 운영 last_value 보다 큰 값으로 setval (PK 충돌 방지). 자세한 내용은 파일 상단 주석 참조.
|
|
|
|
| 시퀀스 | last_value (RPS) | 매퍼 사용처 |
|
|
| --- | ---: | --- |
|
|
| `seq_bom_qty` | 200,000 | `partMng.relatePartInfo` (BOM_PART_QTY.SEQ) |
|
|
| `seq_as_no` | 1,000 | 영업관리 AS 번호 |
|
|
| `seq_comm_code` | 10,000 | comm_code 신규 |
|
|
| `seq_eo_no` | 1,000 | EO_NO 일부 매퍼 |
|
|
| `seq_ecr_no` | 33 (기존) | 설계변경 ECR 번호 |
|
|
|
|
---
|
|
|
|
## 03_long_bom_sample.sql
|
|
|
|
**대상**: BOM 트리 화면 검증용 긴 BOM 1건을 운영DB → RPS 복사.
|
|
|
|
**선정**: `part_bom_report.objid = '1038014721'` / `21008-0109` / "BS030-120H4A11-EN"
|
|
· 126 행 / 4 레벨 (L1=1 / L2=37 / L3=62 / L4=26)
|
|
|
|
**파일**:
|
|
|
|
- `03_long_bom_sample.sql` — TEMP staging + ON CONFLICT DO NOTHING INSERT
|
|
- `pbr_long.csv` — part_bom_report 1행
|
|
- `bpq_long.csv` — bom_part_qty 126행
|
|
|
|
**용도**: E-BOM 조회(M4) 트리 그리드의 동적 LEVEL 컬럼 / 토글 / search_level 등 검증.
|
|
|