Сейчас я нахожусь в процессе миграции моей базы данных MySQL в PostgreSQL. Почти все прошло нормально (ну, после множества поисков правильных параметров mysqldump и т. Д.), За исключением одной таблицы, которая у меня есть - фактически самая важная таблица в моем приложении.
Структура таблицы очень проста:
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
но это очень большой (> 20 Гб).
Я пытался использовать --hex-blob параметр mysqldump - но данные в этом формате не принимаются PostgreSQL, когда я пытался использовать полученный файл дампа в качестве командного файла. Другой вариант, который я пробовал - использовать параметр --tab, чтобы просто получить дамп и затем вставить его в PostgreSQL с помощью команды COPY, но --hex-blob не работает с --tab, а PostgreSQL по-прежнему не принимает файл дампа, в котором говорится недопустимые символы в нем.
Я был бы очень рад получить совет по этому вопросу - хотя я начинаю думать, что написание пользовательского инструмента миграции в конце концов неплохая идея ...
источник
Ответы:
Я думаю, что самый простой способ - использовать это
--hex-blob
включениеmysqldump
и восстановить с помощью psqldecode(string text, type text)
. Однако это не так просто, потому что вам нужно изменить немного созданный дамп (sed, awk), добавив эту функцию декодирования. Например:PSQL сессия:
источник
sed "s/0x\([0-9A-F]*\)/decode('\1','hex')/g" prepg.dump > pg.dump