Je suis en train de migrer ma base de données MySQL vers PostgreSQL. Presque tout s'est bien passé (enfin, après de nombreuses recherches sur google pour les paramètres mysqldump corrects, etc.) sauf une table que j'ai - en fait la table la plus importante de mon application.
La structure du tableau est très 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
mais il est très grand (> 20 Go).
J'ai essayé d'utiliser le paramètre --hex-blob de mysqldump - mais les données dans ce format ne sont pas acceptées par PostgreSQL lorsque j'ai essayé d'utiliser le fichier de vidage résultant comme fichier de commande. Une autre option que j'ai essayée consiste à utiliser l'option --tab pour simplement obtenir un vidage, puis l'insérer dans PostgreSQL avec la commande COPY - mais --hex-blob ne fonctionne pas avec --tab et PostgreSQL n'accepte toujours pas le fichier de vidage qui y dit contiennent des caractères non valides.
Je serais très heureux d'obtenir des conseils à ce sujet - même si je commence à penser qu'écrire un outil de migration personnalisé n'est pas une mauvaise idée après tout ...
la source
Réponses:
Je pense que le moyen le plus simple est d'utiliser cet
--hex-blob
interrupteurmysqldump
et de le restaurer par psql, avecdecode(string text, type text)
. Cependant, ce n'est pas si simple, car vous devez modifier un peu le vidage produit (sed, awk), en ajoutant cette fonction de décodage. Par exemple:session psql:
la source
sed "s/0x\([0-9A-F]*\)/decode('\1','hex')/g" prepg.dump > pg.dump