Home » อื่นๆ » มา convert DB MySQL to PostgreSQL กันเถอะ

MySQL คือ โปรแกรมจัดการฐานข้อมูลชนิดหนึ่งซึ่งก็เป็นที่รู้จักกันอย่างกว้างขวาง ก็ตั้งแต่เรียนมาก็ได้ยินแค่ MySQL ว่ามันคือสุดยอดฐานข้อมูลที่ทุกสถานศึกษาต่างแนะนำ พอเติบโตขึ้นมาหน่อยก็รู้จักกับ MariaDB แต่ในโลกของความจริงแล้วพอมาทำงานมันไม่ได้มีแค่ 2 ตัวน่ะสิ เอ้าลองเอาลิงค์นี้ไปดูคร่าวๆมีเป็นร้อย DB-Engines

แต่ทำไมเราถึงเลือก PostgreSQL ก็เพราะมันเร็วส์..แถม CRUD ยังเขียนเหมือน MySQL อีกไม่ต้องเรียนรู้อะไรเพิ่มมากแถมได้ความเร็วโดยไม่ดันทุรังจนเกินไปจึงเลือกตัวนี้แหละทีนี้งานที่เราจะต้องทำคือย้ายข้อมูลของ Mysql มาไว้ที่ Postgre ทั้งหมด เราจึงทำการกด export จาก phpMyAdmin ปกติแล้วก็ใช้คำสั่ง pg_dump ของ Postgre ในการ import Database แล้วกดปุ่ม ok …. 1 2 3 ตู้มมมมมตัวใหญ่ๆ เห้ยอะไรว่ะจากที่อ่านมาไหนบอกเหมือนกันทุกอย่างจากนั้นเราก็พยายามหาข้อมูลอยู่เยอะมากจนพบว่า data type หรือ ชนิดของ field มันไม่เหมือนกันเช่น string ใน Mysql = VARCHAR ใน Postgre = character varying เป็นต้น

หลังจากนั้นเราต้องหา solution เพื่อแปลง table, field ต่างๆจาก MySQL ให้เป็น PostgreSQL ให้ได้ก็ไปเจอตัวนี้ (จริงๆไปนั่งสร้าง field ใหม่แล้วค่อย migrate data ไปก็ได้ แต่ Programer อ่ะเนาะมันต้องยากๆหน่อย 555)

วิธีการใช้งานก็ไม่ยากเลย ขั้นแรกเราต้อง export Mysql DB ออกมาให้ compatible postgresql ก่อนแนะนำว่าให้ export ผ่าน mysqldump เพราะ phpMyAdmin นั้นไม่สามารถปรับ mode postgresql ได้ (*หรือผมหาไม่เจอใครเจอบอกด้วย)

mysqldump --compatible=postgresql --default-character-set=utf8 \
-r databasename.mysql -u username databasename

ในตัวอย่างผม export DB ชื่อว่า databasename.mysql จากนั้นเราก็ติดตั้ง python ให้เรียบร้อยแล้ว cd เข้าไปที่ git repo ที่ clone มาจากนั้นพิมพ์

python db_converter.py databasename.mysql outputname.psql

ตรง databasename.mysql เราอาจจะใส่ path ที่เรา save ไฟล์ไว้แต่แนะนำว่าเอาไฟล์ที่เรา save จาก mysql ไปวางไว้ที่เดียวกับ git repo ที่เรา clone มาน่าจะง่ายสุดแล้วจากนั้นเป็นอันเสร็จสิ้นได้ไฟล์ psql สำหรับ import เรียบร้อยพร้อม data ทั้งหมดที่เรา export มาด้วย

แต่!! เนื่องจาก lib ตัวนี้เค้าเขียนขึ้นมาเพื่อแปลง database ของเค้าเพื่อใช้กับ Django มันจะมี field พวก string text บางตัวที่เค้าจะทำ size * 2 เพื่อให้เหมาะกับปัญหา unicode size ที่เค้าเจอใน Django เพราะฉะนั้น import ไปแล้วก็อย่าลืมเช็ค data type กันดีๆด้วยนะ

สำหรับการ import DB เข้า postgre สามารถใช้คำสั่ง pg_dump ได้แบบนี้

pg_dump -s databasename < outputname.psql

แต่เราสามารถเปิดไฟล์ psql ที่ convert แล้ว copy text ทั้งหมดแล้วเอาไปรันใน GUI Client postgre ต่างๆได้เลยแต่ไม่แนะนำถ้า DB มีขนาดใหญ่มากอาจจะ time out ซะก่อน pg_dump น่าจะดีที่สุดจ้าาา

เกี่ยวกับผู้เขียน

Itthipat Thitsarak

สวัสดีครับผม อิทธิพัทธ์ (เป้) เป็น Freelance Web developer ชอบหาเทคนิคต่างๆที่ทำให้ชีวิต Programmer ง่ายขึ้นโดย Blog นี้จะ สอน Laravel, Vuejs, CSS, HTML 5 และอื่นๆ ที่เกี่ยวกับการทำเว็บไซต์

ขอบคุณทุกคนที่ติดตาม และอ่านบทความของผมครับ หากใครมีคำถามหรืออยากให้ผมเขียนเกี่ยวกับเรื่องอะไรเพิ่มเติม สามารถแสดงความคิดเห็นไว้ที่ใต้บทความ หรือส่งเรื่องเข้ามาที่ Email ได้เลยครับ หัวข้อไหนน่าสนใจ ผมจะหยิบมาเขียนบทความให้ได้อ่านกันเรื่อยๆครับ

Scroll to Top