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