ERP-node/db/migrate_company13_export.sh

150 lines
4.2 KiB
Bash
Executable File

#!/bin/bash
# ============================================================
# 엘에스티라유텍(주) - 동부지사 (COMPANY_13) 전체 데이터 Export
#
# 사용법:
# 1. SOURCE_* / TARGET_* 변수를 수정
# 2. chmod +x migrate_company13_export.sh
# 3. ./migrate_company13_export.sh export → SQL 파일 생성
# 4. ./migrate_company13_export.sh import → 대상 DB에 적재
# ============================================================
SOURCE_HOST="localhost"
SOURCE_PORT="5432"
SOURCE_DB="vexplor"
SOURCE_USER="postgres"
TARGET_HOST="대상_호스트"
TARGET_PORT="5432"
TARGET_DB="대상_DB명"
TARGET_USER="postgres"
OUTPUT_FILE="company13_migration_$(date '+%Y%m%d_%H%M%S').sql"
# 데이터가 있는 테이블 (의존성 순서)
TABLES=(
"company_mng"
"user_info"
"authority_master"
"menu_info"
"external_db_connections"
"external_rest_api_connections"
"screen_definitions"
"screen_groups"
"screen_layouts_v1"
"screen_layouts_v2"
"screen_layouts_v3"
"screen_menu_assignments"
"dashboards"
"dashboard_elements"
"flow_definition"
"node_flows"
"table_column_category_values"
"attach_file_info"
"tax_invoice"
"auth_tokens"
"batch_configs"
"batch_execution_logs"
"batch_mappings"
"digital_twin_layout"
"digital_twin_layout_template"
"dtg_management"
"transport_statistics"
"vehicles"
"vehicle_location_history"
)
do_export() {
echo "=========================================="
echo " COMPANY_13 데이터 Export 시작"
echo "=========================================="
cat > "$OUTPUT_FILE" <<'HEADER'
-- ============================================================
-- 엘에스티라유텍(주) - 동부지사 (COMPANY_13) 전체 데이터 마이그레이션
--
-- 총 29개 테이블, 약 11,500건 데이터
--
-- 실행 방법:
-- psql -h HOST -U USER -d DATABASE -f 이_파일명.sql
-- ============================================================
SET client_encoding TO 'UTF8';
SET standard_conforming_strings = on;
BEGIN;
HEADER
for TABLE in "${TABLES[@]}"; do
COUNT=$(psql -h "$SOURCE_HOST" -p "$SOURCE_PORT" -U "$SOURCE_USER" -d "$SOURCE_DB" \
-t -A -c "SELECT COUNT(*) FROM $TABLE WHERE company_code = 'COMPANY_13'")
COUNT=$(echo "$COUNT" | tr -d '[:space:]')
if [ "$COUNT" -gt 0 ]; then
echo " $TABLE: ${COUNT}건 추출 중..."
echo "-- ----------------------------------------" >> "$OUTPUT_FILE"
echo "-- $TABLE (${COUNT}건)" >> "$OUTPUT_FILE"
echo "-- ----------------------------------------" >> "$OUTPUT_FILE"
echo "COPY $TABLE FROM stdin;" >> "$OUTPUT_FILE"
psql -h "$SOURCE_HOST" -p "$SOURCE_PORT" -U "$SOURCE_USER" -d "$SOURCE_DB" \
-t -A -c "COPY (SELECT * FROM $TABLE WHERE company_code = 'COMPANY_13') TO STDOUT" >> "$OUTPUT_FILE"
echo "\\." >> "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"
else
echo " $TABLE: 데이터 없음 (건너뜀)"
fi
done
echo "" >> "$OUTPUT_FILE"
echo "COMMIT;" >> "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"
echo "-- 마이그레이션 완료" >> "$OUTPUT_FILE"
echo ""
echo "=========================================="
echo " Export 완료: $OUTPUT_FILE"
echo "=========================================="
echo ""
echo "대상 DB에서 실행:"
echo " psql -h $TARGET_HOST -p $TARGET_PORT -U $TARGET_USER -d $TARGET_DB -f $OUTPUT_FILE"
}
do_import() {
SQL_FILE=$(ls -t company13_migration_*.sql 2>/dev/null | head -1)
if [ -z "$SQL_FILE" ]; then
echo "마이그레이션 SQL 파일을 찾을 수 없습니다. 먼저 export를 실행하세요."
exit 1
fi
echo "=========================================="
echo " COMPANY_13 데이터 Import 시작"
echo " 파일: $SQL_FILE"
echo " 대상: $TARGET_HOST:$TARGET_PORT/$TARGET_DB"
echo "=========================================="
psql -h "$TARGET_HOST" -p "$TARGET_PORT" -U "$TARGET_USER" -d "$TARGET_DB" -f "$SQL_FILE"
echo ""
echo "=========================================="
echo " Import 완료"
echo "=========================================="
}
case "${1:-export}" in
export)
do_export
;;
import)
do_import
;;
*)
echo "사용법: $0 {export|import}"
exit 1
;;
esac