Bagaimana cara mengubah mysql ke postgresql? [Tutup]

14

Saya putus asa mencari alat konversi untuk mengkonversi database mysql besar ke postgresql. Saya membutuhkan alat / skrip untuk menjadi:

  • Gratis
  • Bekerja di Linux
  • Mudah digunakan dan tidak bermasalah
  • Anda benar-benar mencoba dan mengonfirmasi bahwa itu berhasil
  • Lebih disukai, tidak ditulis dengan Java atau Ruby

Saya telah mencoba berbagai alat yang tercantum di sini , tetapi tidak ada yang berhasil untuk saya.

Terima kasih sebelumnya.

hbp
sumber
Saya bukan ahli PostgreSQL, masih belajar sendiri. Saya menghapus jawaban saya. Namun, ada pertanyaan lain tentang menggunakan mysqldump dengan postgresql diposting oleh orang lain: dba.stackexchange.com/q/9792/877 . Semoga bisa membantu !!!
RolandoMySQLDBA
1
Apa yang salah dengan alat yang ditulis dalam Java? Dan mungkin membantu jika Anda menggambarkan apa yang sebenarnya " tidak berfungsi " dengan mereka semua.
a_horse_with_no_name

Jawaban:

7

Migrasi antara dua DBMS sangat berbeda membutuhkan banyak lebih dari sekedar migrasi data. Tetapi migrasi data biasanya merupakan bagian yang paling mudah.

Cara yang saya coba, yang gratis dan saya dapat mengkonfirmasi bahwa itu berfungsi:

  • buat dump skema hanya mysql
  • Sesuaikan SQL menggunakan editor teks dan banyak pencarian dan ganti
  • jalankan SQL yang dikonversi di Postgres
  • Buat dump teks biasa dari MySQL (mis. CSV, atau format terbatas lainnya)
  • impor data menggunakan perintah COPY PostgreSQL

Mengimpor data mungkin sebenarnya sulit jika Anda mengandalkan perilaku MySQL untuk menerima data ilegal (seperti 31 Februari)

Dugaan saya adalah, bahwa ini akan lebih cepat daripada mencari alat, mengevaluasi banyak dari mereka dan kemudian mencoba memahami yang Anda pilih. Tapi itu tergantung pada "besar" macam apa yang Anda maksud. Jika besar beberapa ratus tabel ini mungkin tidak layak. Jika besar hanya merujuk pada jumlah baris, maka ini mungkin cara tercepat untuk melakukannya.

Ada beberapa alat di luar sana yang dapat membuang skema basis data dalam format DBMS independen (XML), seperti Liquibase , SchemaSpy atau WbSchemaReport . Dengan Liquibase mungkin menjadi yang paling mudah digunakan. Yang lain akan membutuhkan beberapa pekerjaan manual menulis / memperluas XSLT untuk mengubah XML yang dihasilkan.

Jika Anda menggunakan pemicu dan prosedur tersimpan di MySQL, saya tidak percaya akan ada alat otomatis yang dapat menerjemahkannya tanpa memerlukan perbaikan manual besar sesudahnya - dan kemudian prosedur yang dihasilkan mungkin tidak akan menggunakan fitur canggih apa pun dari target DBMS .

seekor kuda tanpa nama
sumber
6

Harus melakukannya baru-baru ini dan karena itu akan memakan waktu terlalu lama untuk mencari alat dan dapat melakukan hal-hal dengan itu, saya melakukannya per tangan dengan vim dan substitusi-foo

  • ganti INT NOT NULL AUTO_INCREMENT(atau yang seperti ini) denganSERIAL
  • mengubah everythig string yang terkait ke dalam TEXT(tidak ada perbedaan kecepatan dalam menggunakan TEXT, VARCHARatau serupa)
  • singkirkan backticks sialan itu `
  • tidak ada mesin penyimpanan di Postgres, jadi lepaskan ENGINE InnoDB(atau apa pun)
  • menghapus UNSIGNED
  • setiap bidang BLOB adalah BYTEA
  • string menggunakan tanda kutip tunggal 'dan tidak ada yang lain
  • menjadi carecul jika Anda menggunakan penggabungan string di suatu tempat, mulai dari 9.1, dukungan Postgres CONCATsebagai fallback untuk penggabungan string non-standar, sebelum 9.1 dilakukan dengan menggunakan 'string' || ' string'
  • tulis ulang kode prosedur apa pun ...
  • urus nama yang dicadangkan (mis. tabel, nama, ...) serta nama huruf besar. Mereka harus dikutip ganda"
  • Diindeks harus hampir sama karena sintaks tidak berbeda
  • Untuk semua yang saya lupa, lihat wikibook tentang topik ini

Masing-masing peluru itu harus dilakukan dengan satu penggantian.

Saya diekspor skema dan data seperatly . Pastikan Anda menggunakan INSERTs bukan COPY. Jika tidak ada hal-hal keuangan terjadi, data harus memerlukan (hampir) tidak ada pembersihan. Pastikan semuanya menyala UTF-8. Dengan 2 file terpisah, skema menjadi lebih mudah dikelola dan Anda tidak memiliki file 1GB untuk diedit.

Saat memuat skema, Anda mendapatkan informasi yang cukup terperinci di mana kesalahan terjadi, jadi debugging harus cukup sederhana.

DrColossos
sumber
Hai, bagaimana mengonversi data lapangan BLOB dari MySQL ke BYTEA dari PostgreSQL? Saya menemukan jika saya membuang data Mysql sebagai masukkan sql, saya tidak dapat memuat data dalam PostgreSQL.
franc
1

Saya melempar ini ke luar, karena belum pernah mencobanya, tetapi Tungesten Replicator dapat melakukan apa yang Anda inginkan. Ini terutama alat replikasi, tapi saya pikir itu mungkin memiliki proses bootstrap yang dapat membantu Anda setidaknya dengan potongan data.

Aaron Brown
sumber