การใช้ Foreign Data Wrapper (FDW) เพื่อเชื่อมต่อ DB อื่น (เช่น MySQL, MongoDB)

Sharing is caring!

PostgreSQL เป็นหนึ่งในฐานข้อมูลที่ยืดหยุ่นมากที่สุดในโลกโอเพนซอร์ส หนึ่งในฟีเจอร์ที่ทำให้มันโดดเด่นคือ Foreign Data Wrapper (FDW) ที่ช่วยให้เราสามารถเชื่อมต่อและ Query ฐานข้อมูลอื่น ๆ ได้เหมือนกับว่าเป็น Table ของ PostgreSQL ไม่ว่าจะเป็น MySQL, MongoDB หรือแม้กระทั่งไฟล์ CSV

Foreign Data Wrapper (FDW) คืออะไร?

FDW เป็น Extension ของ PostgreSQL ที่ใช้สำหรับเชื่อมต่อฐานข้อมูลภายนอก โดยเราสามารถสร้าง Foreign Table ที่อ้างถึง Table จาก Database อื่น ทำให้สามารถ JOIN ข้อมูลระหว่าง PostgreSQL และฐานข้อมูลอื่น ๆ ได้โดยตรง

การติดตั้ง FDW

PostgreSQL มี FDW หลายแบบ ขึ้นอยู่กับฐานข้อมูลที่ต้องการเชื่อมต่อ ตัวอย่างเช่น:

  • postgres_fdw → สำหรับ PostgreSQL อีกตัว
  • mysql_fdw → สำหรับ MySQL/MariaDB
  • mongo_fdw → สำหรับ MongoDB
  • file_fdw → สำหรับไฟล์ CSV

การเชื่อมต่อ PostgreSQL → PostgreSQL (postgres_fdw)

ตัวอย่างการเชื่อมต่อ PostgreSQL กับ PostgreSQL อื่น:

-- เปิดใช้ Extension
CREATE EXTENSION postgres_fdw;

-- สร้าง Server
CREATE SERVER foreign_pg
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host '192.168.1.100', dbname 'remote_db', port '5432');

-- สร้าง User Mapping
CREATE USER MAPPING FOR current_user
SERVER foreign_pg
OPTIONS (user 'remote_user', password 'secret');

-- สร้าง Foreign Table
CREATE FOREIGN TABLE remote_table (
  id INT,
  name TEXT
) SERVER foreign_pg
OPTIONS (schema_name 'public', table_name 'users');
  

เมื่อเสร็จแล้ว เราสามารถ Query ได้เหมือนกับ Table ปกติ:

SELECT * FROM remote_table;
  

การเชื่อมต่อ PostgreSQL → MySQL (mysql_fdw)

หากต้องการเชื่อมต่อกับ MySQL เราสามารถใช้ mysql_fdw ได้ โดยต้องติดตั้ง Extension เพิ่มเติม

-- เปิดใช้ Extension
CREATE EXTENSION mysql_fdw;

-- สร้าง Server
CREATE SERVER mysql_svr
FOREIGN DATA WRAPPER mysql_fdw
OPTIONS (host '192.168.1.200', port '3306', database 'mydb');

-- Mapping User
CREATE USER MAPPING FOR current_user
SERVER mysql_svr
OPTIONS (username 'mysql_user', password 'mysqlpass');

-- สร้าง Foreign Table
CREATE FOREIGN TABLE mysql_customers (
  id INT,
  name TEXT,
  email TEXT
) SERVER mysql_svr
OPTIONS (table 'customers');
  

จากนั้นเราสามารถ Query ได้ทันที:

SELECT * FROM mysql_customers;
  

การเชื่อมต่อ PostgreSQL → MongoDB (mongo_fdw)

PostgreSQL ยังสามารถเชื่อมต่อ MongoDB ได้โดยใช้ mongo_fdw

-- เปิดใช้ Extension
CREATE EXTENSION mongo_fdw;

-- สร้าง Server
CREATE SERVER mongo_svr
FOREIGN DATA WRAPPER mongo_fdw
OPTIONS (address '127.0.0.1', port '27017', database 'mydb');

-- User Mapping
CREATE USER MAPPING FOR current_user
SERVER mongo_svr
OPTIONS (username 'mongouser', password 'mongopass');

-- สร้าง Foreign Table
CREATE FOREIGN TABLE mongo_orders (
  _id TEXT,
  customer TEXT,
  total NUMERIC
) SERVER mongo_svr
OPTIONS (collection 'orders');
  

เมื่อเชื่อมต่อแล้ว สามารถ Query ได้เหมือน Table ปกติ:

SELECT * FROM mongo_orders WHERE total > 1000;
  

ข้อดีของ FDW

  • รวมข้อมูลจากหลาย Database ได้ง่าย
  • สามารถ JOIN PostgreSQL กับ Database อื่นได้
  • ไม่ต้องใช้ ETL แยกออกมา

ข้อจำกัดของ FDW

  • ประสิทธิภาพขึ้นอยู่กับเครือข่ายและ DB ปลายทาง
  • ไม่รองรับทุกฟีเจอร์ของ DB ปลายทาง
  • บาง FDW ต้องติดตั้งเพิ่มเติมจากภายนอก

Best Practices

  • ใช้ FDW สำหรับงาน Query แบบ Read มากกว่า Write
  • สร้าง Index ฝั่ง DB ปลายทางเพื่อให้ Query เร็วขึ้น
  • หลีกเลี่ยง Query ที่ซับซ้อนเกินไป
  • พิจารณา Caching หากมีการ Query ซ้ำบ่อย

สรุป

Foreign Data Wrapper (FDW) เป็นฟีเจอร์ที่ทรงพลังของ PostgreSQL ที่ช่วยให้เชื่อมต่อกับ Database อื่น ๆ ได้อย่างง่ายดาย ไม่ว่าจะเป็น MySQL, MongoDB หรือ PostgreSQL เอง การใช้งาน FDW จะช่วยลดขั้นตอนการ ETL และเพิ่มความยืดหยุ่นในการจัดการข้อมูล

SEO Keywords

PostgreSQL FDW,Foreign Data Wrapper,PostgreSQL Connect MySQL,PostgreSQL Connect MongoDB,SQL FDW Example,Postgres Foreign Table,การใช้ FDW PostgreSQL

Leave a Reply

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *