我现在正在将我的 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 Gb)。
我尝试使用 mysqldump 的 --hex-blob 参数 - 但是当我尝试将生成的转储文件用作命令文件时,PostgreSQL 不接受这种格式的数据。我尝试过的另一个选项是使用 --tab 选项来获取转储,然后使用 COPY 命令将其插入到 PostgreSQL - 但是 --hex-blob 不能使用 --tab 并且 PostgreSQL 仍然不接受转储文件说那里是其中的无效字符。
我很乐意就此事获得任何建议 - 尽管我开始认为编写自定义迁移工具毕竟不是一个坏主意......
我认为最简单的方法是使用该
--hex-blob
开关打开mysqldump
并通过 psql 恢复,使用decode(string text, type text)
. 然而它并不是那么简单,因为你需要改变一点产生的转储(sed,awk),添加解码功能。例如:psql 会话: