Saya sekarang sedang dalam proses migrasi database MySQL saya ke PostgreSQL. Hampir semuanya berjalan dengan baik (well, setelah banyak googling untuk params mysqldump yang benar, dll.) Kecuali satu meja yang saya miliki - sebenarnya tabel yang paling penting di aplikasi saya.
Struktur tabel sangat sederhana:
mysql> show create table samples;
.. skipped ...
CREATE TABLE `samples` (
`File_ID` int(11) NOT NULL,
`File` longblob,
PRIMARY KEY (`File_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=binary
tetapi sangat besar (> 20 Gb).
Saya sudah mencoba menggunakan --hex-gumpalan parameter mysqldump - tetapi data dalam format ini tidak diterima oleh PostgreSQL ketika saya mencoba menggunakan dumpfile yang dihasilkan sebagai file perintah. Opsi lain yang saya coba adalah menggunakan opsi --tab untuk mendapatkan dump dan kemudian memasukkannya ke PostgreSQL dengan perintah COPY - tetapi --hex-blob tidak bekerja dengan --tab dan PostgreSQL masih tidak menerima dumpfile yang mengatakan ada adalah karakter yang tidak valid di dalamnya.
Saya akan sangat senang mendapatkan saran tentang masalah ini - meskipun saya mulai berpikir bahwa menulis alat migrasi kustom bukanlah ide yang buruk ...
sumber
Jawaban:
Saya pikir cara paling sederhana adalah dengan menggunakan
--hex-blob
saklar itumysqldump
dan mengembalikan oleh psql, dengandecode(string text, type text)
. Namun itu tidak sesederhana itu, karena Anda perlu mengubah sedikit dump yang diproduksi (sed, awk), menambahkan fungsi decode itu. Sebagai contoh:sesi psql:
sumber
sed "s/0x\([0-9A-F]*\)/decode('\1','hex')/g" prepg.dump > pg.dump