วิธีแปลง mysql เป็น postgresql [ปิด]


14

ฉันกำลังมองหาเครื่องมือการแปลงเพื่อแปลงฐานข้อมูล mysql ขนาดใหญ่เป็น postgresql ฉันต้องการเครื่องมือ / สคริปต์เพื่อเป็น:

  • ฟรี
  • ทำงานภายใต้ Linux
  • ใช้งานง่ายและไม่บั๊ก
  • คุณลองและยืนยันว่าใช้งานได้จริง
  • เด่นกว่าไม่ได้เขียนด้วย Java หรือ Ruby

ฉันได้ลองใช้เครื่องมือต่าง ๆ ที่ระบุไว้ที่นี่แต่ไม่มีใครทำงานให้ฉันได้

ขอบคุณล่วงหน้า.


ฉันไม่ใช่ผู้เชี่ยวชาญของ PostgreSQL แต่ยังเรียนรู้ได้ด้วยตัวเอง ฉันลบคำตอบของฉัน แต่มีคำถามเกี่ยวกับการใช้ mysqldump กับ PostgreSQL โพสต์โดยคนอื่นอีกdba.stackexchange.com/q/9792/877 หวังว่ามันจะช่วย !!!
RolandoMySQLDBA

1
เกิดอะไรขึ้นกับเครื่องมือที่เขียนด้วย Java? และมันอาจช่วยได้ถ้าคุณอธิบายว่า " ไม่ทำงาน " กับทุกคนอย่างแน่นอน
a_horse_with_no_name

คำตอบ:


7

การโอนย้ายระหว่างสอง DBMS แตกต่างกันมากต้องมีมากขึ้นกว่าเพียงแค่การโอนย้ายข้อมูล แต่การโยกย้ายข้อมูลมักเป็นส่วนที่ง่ายที่สุด

วิธีที่ฉันลองซึ่งฟรีและฉันสามารถยืนยันได้ว่ามันใช้งานได้:

  • สร้างการถ่ายโอนข้อมูล schema mysql เท่านั้น
  • ปรับ SQL โดยใช้โปรแกรมแก้ไขข้อความและค้นหาและแทนที่เป็นจำนวนมาก
  • เรียกใช้ SQL ที่แปลงแล้วใน Postgres
  • สร้างการถ่ายโอนข้อมูลข้อความธรรมดาจาก MySQL (เช่น CSV หรือรูปแบบที่มีตัวคั่นอื่น ๆ )
  • นำเข้าข้อมูลโดยใช้คำสั่ง COPY ของ PostgreSQL

การนำเข้าข้อมูลอาจเป็นเรื่องยากหากคุณเชื่อมั่นในพฤติกรรมของ MySQL ในการรับข้อมูลที่ผิดกฎหมาย (เช่นวันที่ 31 กุมภาพันธ์)

ฉันเดาว่านี่จะเร็วกว่าการค้นหาเครื่องมือประเมินกลุ่มพวกเขาแล้วพยายามเข้าใจสิ่งที่คุณเลือก แต่มันก็ขึ้นอยู่กับว่า "ใหญ่" ประเภทใดที่คุณอ้างถึง หากตารางใหญ่มีหลายร้อยตารางอาจไม่สามารถทำได้ ถ้าใหญ่เพียงอ้างถึงจำนวนแถวนี่อาจเป็นวิธีที่เร็วที่สุดที่จะทำ

มีเครื่องมือบางอย่างออกมีที่สามารถถ่ายโอนข้อมูลคีมาฐานข้อมูลอยู่ใน DBMS อิสระ (XML) รูปแบบเช่นLiquibase , SchemaSpyหรือWbSchemaReport ด้วย Liquibase อาจเป็นวิธีที่ใช้ง่ายที่สุด คนอื่น ๆ จะต้องเขียนด้วยตนเอง / ขยาย XSLT เพื่อแปลง XML ที่สร้างขึ้น

หากคุณกำลังใช้และวิธีการเรียกเก็บไว้ใน MySQL, ผมไม่เชื่อว่าจะมีการใด ๆเครื่องมืออัตโนมัติที่สามารถแปลพวกเขาโดยไม่ต้องมีการแก้ไขคู่มือที่สำคัญหลังจากนั้น - และจากนั้นขั้นตอนที่สร้างขึ้นอาจจะไม่ใช้คุณสมบัติขั้นสูงใด ๆ ของ DBMS เป้าหมาย .


6

ต้องทำเร็ว ๆ นี้และเนื่องจากมันใช้เวลานานเกินไปที่จะมองหาเครื่องมือและสามารถทำสิ่งต่าง ๆ ได้ฉันจึงทำด้วยมือด้วย vim และ sub-foo

  • แทนที่INT NOT NULL AUTO_INCREMENT(หรืออะไรทำนองนี้) ด้วยSERIAL
  • เปลี่ยนสตริง everythig ที่เกี่ยวข้องเป็นTEXT(ไม่มีความแตกต่างในการใช้ความเร็วTEXT, VARCHARหรือคล้ายกัน)
  • กำจัด f *** ing backticks ` เหล่านั้น
  • ไม่มีเครื่องมือจัดเก็บใน Postgres ดังนั้นให้ลบENGINE InnoDB(หรืออะไรก็ตาม)
  • ลบ UNSIGNED
  • ทุกฟิลด์ BLOB คือ BYTEA
  • สตริงใช้เครื่องหมายคำพูดเดี่ยว'และไม่มีอะไรอื่น
  • จงระวังถ้าคุณใช้การต่อสายอักขระที่ใดที่หนึ่งเริ่มต้นจาก 9.1 การสนับสนุน Postgres CONCATเป็นทางเลือกสำหรับการต่อสตริงที่ไม่เป็นมาตรฐานก่อนที่จะทำ 9.1 โดยใช้ 'string' || ' string'
  • เขียนโค้ดโพรซีเดอร์ใหม่อีกครั้ง ...
  • ดูแลชื่อที่สงวนไว้ (เช่นตารางชื่อ ... ) รวมถึงชื่อตัวพิมพ์ใหญ่ พวกเขาจะต้องยกมาเป็นสองเท่า"
  • การจัดทำดัชนีควรจะเหมือนกันมากเนื่องจากไวยากรณ์ไม่ได้เปลี่ยนแปลง
  • สำหรับทุกอย่างที่ฉันลืมตรวจสอบ wikibooks ในหัวข้อนี้

แต่ละกระสุนควรทำด้วยการเปลี่ยนตัวครั้งเดียว

ฉันส่งออกคีมาและข้อมูลที่seperatly ตรวจสอบให้แน่ใจว่าคุณใช้INSERTs COPYแทน หากไม่มีสิ่งที่ไม่น่าเชื่อเกิดขึ้นข้อมูลควรต้องการ (เกือบ) ไม่ต้องล้างข้อมูล UTF-8ตรวจสอบให้แน่ใจทุกอย่างอยู่บน ด้วย 2 ไฟล์แยกกันสคีมาจะจัดการได้มากขึ้นและคุณไม่มีไฟล์ 1GB ที่จะแก้ไข

เมื่อโหลด schema คุณจะได้รับข้อมูลโดยละเอียดที่ข้อผิดพลาดอยู่ดังนั้นการดีบักจึงค่อนข้างง่าย


สวัสดีวิธีแปลงข้อมูลฟิลด์ BLOB ของ MySQL เป็น BYTEA ของ PostgreSQL ฉันพบว่าฉันทิ้งข้อมูลของ Mysql เป็น insert sql ฉันไม่สามารถโหลดข้อมูลใน PostgreSQL ได้
ฟรังก์

1

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

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