Agora estou migrando meu banco de dados MySQL para PostgreSQL. Quase tudo correu bem (bem, depois de muito pesquisar no Google os parâmetros corretos do mysqldump, etc.), exceto uma tabela que tenho - na verdade, a tabela mais importante do meu aplicativo.
A estrutura da tabela é muito simples:
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
mas é muito grande (> 20 Gb).
Eu tentei usar o parâmetro --hex-blob do mysqldump - mas os dados neste formato não são aceitos pelo PostgreSQL quando tentei usar o dumpfile resultante como um arquivo de comando. Outra opção que tentei é usar a opção --tab para apenas obter um dump e inseri-lo no PostgreSQL com o comando COPY - mas --hex-blob não está funcionando com --tab e o PostgreSQL ainda não aceita o dumpfile dizendo lá são caracteres inválidos nele.
Eu ficaria muito feliz em receber qualquer conselho sobre este assunto - embora eu esteja começando a pensar que escrever uma ferramenta de migração personalizada não é uma má ideia, afinal...
Acho que a maneira mais simples é usar essa
--hex-blob
opçãomysqldump
e restaurar pelo psql, comdecode(string text, type text)
. Porém não é tão simples, pois você precisa alterar um pequeno dump produzido (sed, awk), adicionando aquela função de decodificação. Por exemplo:sessão psql: