วิธีแปลงฐานข้อมูล MySQL เป็น PostgreSQL


20

มีเครื่องมือบรรทัดคำสั่งสำหรับแปลงฐานข้อมูล MySQL เป็น PostgreSQL หรือไม่ ฉันต้องการทราบว่ามีวิธีการแปลงฐานข้อมูลโดยใช้mysqldumpคำสั่งปกติหรือไม่


1
เริ่มที่นี่: wiki.postgresql.org/wiki/…
a_horse_with_no_name

4
เมื่อใดก็ตามที่ฉันเห็นสิ่งนี้ฉันร้องไห้ด้วยความปิติยินดี
rfusca


นี่เป็นหนึ่งในคำถามที่มีประโยชน์ที่สุดในเว็บไซต์นี้ทั้งหมด
Evan Carroll

คำตอบ:


13

คุณเคยลองไหม:

mysqldump --compatible=postgresql dbname > export.sql

จากนั้นทำเช่นนี้เพื่อหลบหนีคำพูด

sed "s/\\\'/\'\'/g" export.sql > export1.sql

อาจต้องใช้การนวดเพิ่มขึ้นดังนั้นโปรดดู mysqldump doco ให้ละเอียดยิ่งขึ้น


2
ฉันได้พยายามใช้วิธีการที่กำหนดโดยคุณมีอยู่แล้ว แต่จะให้ข้อผิดพลาดเมื่อคืนใน PostgreSQL
Mughil

2
@ Mughil ข้อผิดพลาดคืออะไร?
Janus Troelsen

4
5 ปีและไม่มีใครได้รับการแก้ไขmysqldumpเลย syntax error at or near "(" LINE 2: "id" int(10) NOT NULL,
Cees Timmerman

1
ตามdev.mysql.com/doc/refman/8.0/en/…ค่าที่อนุญาตเท่านั้น--compatibleคือansi
phunehehe

7

ต่อไปนี้เป็นเครื่องมือโอเพนซอร์ซบางตัวที่มีประโยชน์มาก:

fromMySqlToPostgreSql เป็นเครื่องมือที่เข้าถึงคุณลักษณะและใช้งานง่ายมาก
มันแมปประเภทข้อมูลโยกย้ายข้อ จำกัด ดัชนี PKs และ FK เหมือนกับที่อยู่ในฐานข้อมูล MySQL ของคุณ
ใต้ฝากระโปรงมันใช้ PostgreSQL COPY ดังนั้นการถ่ายโอนข้อมูลจึงรวดเร็วมาก
FromMySqlToPostgreSql เขียนใน PHP (> = 5.4)

pgloader   เป็นเครื่องมือโหลดข้อมูลสำหรับ PostgreSQL โดยใช้คำสั่ง COPY ข้อได้เปรียบหลักมากกว่าเพียงแค่ใช้

COPY
หรือ
\copy
และการใช้ Foreign Data Wrapper เป็นพฤติกรรมการทำธุรกรรมโดยที่ pgloader จะเก็บไฟล์ข้อมูลที่แยกต่างหากแยกต่างหาก แต่พยายามคัดลอกข้อมูลที่ดีในฐานข้อมูลของคุณต่อไป พฤติกรรม PostgreSQL เริ่มต้นคือการทำธุรกรรมซึ่งหมายความว่าสายที่ผิดพลาดใด ๆ ในข้อมูลอินพุต (ไฟล์หรือฐานข้อมูลระยะไกล) จะหยุดการโหลดจำนวนมากทั้งหมดสำหรับตาราง pgloader ยังดำเนินการฟอร์แมตข้อมูลตัวอย่างทั่วไปของการเปลี่ยนแปลงของ MySQL datestamps 0000-00-00 และ 0000-00-00 00:00:00 ถึง PostgreSQL
NULL
ค่า (เพราะปฏิทินของเราไม่เคยมีศูนย์ปี)
pgloader เขียนใน LISP และแจกจ่ายเป็นซอร์สโค้ดดังนั้นคุณต้องรวบรวมก่อนใช้

หวังว่ามันจะช่วยคุณ ...


1
pgloader ยังแนะนำให้ใช้เครื่องมือการย้ายข้อมูลบนเอกสาร postgre ดังนั้นฉันจึงบอกว่าเป็นตัวเลือกที่ดีที่สุด ฉันเคยใช้มันกับฐานข้อมูลขนาดเล็กที่มีมากกว่า 50+ โต๊ะทำงานได้อย่างมีเสน่ห์
Capaj

3

มีเครื่องมือการโยกย้ายฟรีที่ค่อนข้างใช้งานง่ายพัฒนาโดย EnterpriseDB เอง สามารถติดตั้งผ่านทาง StackBuilder: Migration Toolkit


3

ฉันเพิ่งใช้เครื่องมือไม่ฟรีจากDBConvertเพื่อแปลงฐานข้อมูลการเข้าถึงเป็น postgres และพบว่ามันคุ้มค่ากับเงินเมื่อเทียบกับระยะเวลาที่ฉันเสียลองฟรีอย่างน่าเชื่อถือ ขายเครื่องมือที่คล้ายกันสำหรับ MySQL <-> postgresซึ่งฉันไม่ได้ใช้ แต่อาจจะคุ้มค่าในการพิจารณาเว้นแต่คุณจะสนใจเฉพาะเครื่องมือบรรทัดคำสั่ง

ในกรณีที่คุณสงสัยว่าฉันไม่ได้มีส่วนเกี่ยวข้องกับพวกเขาในทางใดทาง :-)


3

ตัวอย่างเช่นคุณสามารถใช้ EnterpriseDB Migration Wizard

สามารถโยกย้าย OracleDB ได้อย่างดีเยี่ยม แต่สำหรับ Mysql มีข้อ จำกัด บางประการเช่นไม่สนับสนุนมุมมองทริกเกอร์ขั้นตอนการจัดเก็บ

สำหรับข้อมูลเพิ่มเติมโปรดดูที่การกีฬาการโยกย้าย Toolkit ไม่แน่ใจ แต่สามารถโยกย้าย mysql-> oracle-> postgresql บันทึกขั้นตอนการจัดเก็บของคุณได้ (ในกรณีที่มีอยู่)

ตัวอย่างนี้: เครื่องมือการย้ายฐานข้อมูลและ SQL


1

นี่เป็นเพียงการเพิ่มคำตอบที่มีอยู่ซึ่งช่วยให้ฉันค้นหาโซลูชันนี้ ผมใช้FromMySqlToPostgreSql สิ่งที่คุณต้องทำคือการดาวน์โหลดและแตกไฟล์จากFromMySqlToPostgreSqlทำสำเนาของไฟล์ปรับแต่งตัวอย่างตั้งค่าการเชื่อมต่อฐานในและรันไฟล์ดัชนีด้วยคำสั่งต่อไปนี้:

php index.php config.xml

เรียบง่าย แต่มีประสิทธิภาพ!


คุณช่วยแก้ไขโพสต์ของคุณด้วยลิงก์ไปยังเครื่องมือนี้ได้ไหม
dezso

ขอโทษฉันลืมไปแล้ว เพิ่ม!
toing_toing

นี่มันตลกดี คุณรู้หรือไม่ว่าผู้เขียนเครื่องมือได้โพสต์คำตอบด้วยหรือไม่ ;) ตอนนี้ฉันทำ
dezso

ฉันภูมิใจ! เขาไม่ได้อธิบายเกี่ยวกับปลั๊กอินที่ยอดเยี่ยมของเขา
toing_toing

0

มีเครื่องมือ opensource ที่ให้ฟังก์ชันการแปลงฐานข้อมูล MySQL เป็น Postgresql db รวมถึงดัชนี fks และข้อมูล

https://github.com/ggarri/mysql2psql

เครื่องมือนี้ช่วยให้สามารถกำหนดการเปลี่ยนแปลงสคีมาเพื่อให้คุณสามารถทำการอัพเกรดสคีมาปัจจุบันของคุณในเวลาทำงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.