PlusMagi's Blog By Pitt Phunsanit Ai,Database MSSQL: batch exporter tables data

MSSQL: batch exporter tables data

ในโลกของการพัฒนาซอฟต์แวร์และการวิเคราะห์ข้อมูล (Data Analytics) การส่งออกข้อมูล (Data Export) เป็นขั้นตอนที่เกิดขึ้นบ่อยครั้ง โดยเฉพาะอย่างยิ่งเมื่อเราต้องย้ายข้อมูลจากสภาพแวดล้อมการพัฒนา (Dev) ไปยังสภาพแวดล้อมการทดสอบ (QA) หรือเมื่อต้องการสร้างรายงานขนาดใหญ่

อย่างไรก็ตาม หากฐานข้อมูลมีตารางจำนวนมาก การทำการ Export ทีละตารางผ่านเครื่องมืออย่าง pgAdmin หรือ DBeaver นั้นเป็นงานที่ใช้เวลานานและเสี่ยงต่อความผิดพลาดสูง บทความนี้จะนำเสนอแนวทางระดับ Senior Architect ในการใช้ PostgreSQL เพื่อทำการ Export ข้อมูลหลายตาราง (Batch Export) อย่างเป็นระบบและอัตโนมัติ

💡 หลักการทำงาน: การใช้ psql และ Scripting

ใน PostgreSQL การ Export ข้อมูลจำนวนมากอย่างมีประสิทธิภาพที่สุดคือการใช้คำสั่ง COPY ซึ่งมีประสิทธิภาพสูงกว่าคำสั่ง SELECT * INTO ทั่วไป สำหรับการทำ Batch Export ที่ครอบคลุมหลายตาราง เราจะไม่ใช้คำสั่ง SQL ธรรมดา แต่จะใช้ประโยชน์จาก Command Line Interface (CLI) ของ PostgreSQL คือ psql ร่วมกับการเขียน Shell Script (Bash) เพื่อวนลูป (Loop) และรันคำสั่ง COPY สำหรับแต่ละตารางที่ต้องการ

ขั้นตอนการสร้าง Batch Export Script

  1. กำหนดรายการตาราง: สร้างรายการชื่อตารางทั้งหมดที่ต้องการ Export
  2. สร้าง Loop: ใช้ Shell Script เพื่อวนลูปผ่านรายการตารางเหล่านั้น
  3. รันคำสั่ง COPY: ภายในลูป จะมีการรันคำสั่ง psql -c "COPY schema.table_name TO STDOUT | sed 's/\n/\t/g' | sed 's/\t/\n/g' > output_dir/table_name.csv" เพื่อส่งออกข้อมูลเป็นไฟล์ CSV

SQL

# batch_export_data.sh - PostgreSQL Batch Exporter Script

#!/bin/bash

# --- CONFIGURATION ---
DB_HOST="localhost"
DB_PORT="5432"
DB_USER="postgres"
DB_NAME="my_production_db"
OUTPUT_DIR="./exports/$(date +%Y%m%d_%H%M%S)"

# รายการตารางที่ต้องการ Export (Schema.Table)
tABLE_LIST=("public.users" "public.products" "public.orders")

# สร้าง Directory สำหรับเก็บไฟล์
mkdir -p $OUTPUT_DIR

# --- BATCH EXPORT LOGIC ---
for TABLE in "${@}"; do
    echo "
[INFO] Exporting data for table: $TABLE"
    
    # ใช้ psql เพื่อรันคำสั่ง COPY และบันทึกผลลัพธ์เป็น CSV
    psql -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -c "COPY $TABLE TO STDOUT WITH (FORMAT CSV, HEADER true);"
    
    # บันทึก Output ไปยังไฟล์ CSV ที่มีชื่อตามตาราง
    # (ในสภาพแวดล้อมจริง อาจต้องมีการจัดการ redirection ที่ซับซ้อนกว่านี้)
    psql -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME -c "COPY $TABLE TO STDOUT WITH (FORMAT CSV, HEADER true);" > "$OUTPUT_DIR/${TABLE//./_}.csv"
    
    echo "[SUCCESS] Exported $TABLE to $OUTPUT_DIR/${TABLE//./_}.csv"
done

echo "
========================================"
echo "✅ Batch Export Complete! Files saved in $OUTPUT_DIR"

🚀 ข้อดีของการใช้ Batch Export ด้วย Scripting

การใช้แนวทาง Scripting นี้มอบข้อได้เปรียบที่สำคัญกว่าการ Export แบบ Manual อย่างชัดเจน:

  • ความเร็วและประสิทธิภาพ: คำสั่ง COPY ถูกออกแบบมาเพื่อการถ่ายโอนข้อมูลขนาดใหญ่โดยเฉพาะ ทำให้เร็วกว่าการใช้คำสั่ง SQL ทั่วไป
  • ความสามารถในการทำซ้ำ (Reproducibility): เมื่อเขียนเป็น Script แล้ว สามารถรันซ้ำได้ทุกเมื่อ ทำให้มั่นใจได้ว่าชุดข้อมูลที่ Export ออกมามีความสม่ำเสมอ
  • การจัดการข้อผิดพลาด: สามารถเพิ่ม Logic การตรวจสอบ (Error Handling) เข้าไปใน Script ได้ เช่น การตรวจสอบว่าตารางมีอยู่จริงหรือไม่ ก่อนที่จะเริ่ม Export

✅ บทสรุป

การทำ Batch Export ข้อมูลใน PostgreSQL ไม่ได้จำกัดอยู่แค่การคลิกปุ่ม Export แต่ต้องอาศัยความเข้าใจในการทำงานของ Command Line Interface (CLI) และการเขียน Scripting เพื่อให้เกิดระบบอัตโนมัติ การใช้ psql ร่วมกับ Shell Script เป็นแนวทางที่ Senior Architect ควรนำไปใช้ เพื่อให้กระบวนการย้ายและสำรองข้อมูลขนาดใหญ่เป็นไปอย่างรวดเร็ว ปลอดภัย และสามารถทำซ้ำได้อย่างสมบูรณ์