Ahora estoy en proceso de migrar mi base de datos MySQL a PostgreSQL. Casi todo salió bien (bueno, después de buscar en Google los parámetros correctos de mysqldump, etc.) excepto una tabla que tengo, en realidad la tabla más importante de mi aplicación.
La estructura de la tabla es muy simple:
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
pero es muy grande (> 20 Gb).
Intenté usar el parámetro --hex-blob de mysqldump - pero PostgreSQL no aceptó los datos en este formato cuando intenté usar el archivo de volcado resultante como un archivo de comando. Otra opción que he probado es usar la opción --tab para obtener un volcado y luego insertarlo en PostgreSQL con el comando COPY - pero --hex-blob no funciona con --tab y PostgreSQL todavía no acepta el archivo de volcado que dice allí son caracteres inválidos en el mismo.
Me alegraría recibir algún consejo sobre este asunto, aunque estoy empezando a pensar que escribir una herramienta de migración personalizada no es una mala idea después de todo ...
fuente
Respuestas:
Creo que la forma más sencilla es usar ese
--hex-blob
interruptormysqldump
y restaurarlo mediante psql, condecode(string text, type text)
. Sin embargo, no es tan simple, porque necesita cambiar un pequeño volcado producido (sed, awk), agregando esa función de decodificación. Por ejemplo:sesión psql:
fuente
sed "s/0x\([0-9A-F]*\)/decode('\1','hex')/g" prepg.dump > pg.dump