我现在正在将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仍然不接受在那说的转储文件是无效字符。
我很高兴收到关于此事的任何建议-尽管我开始认为编写自定义迁移工具毕竟不是一个坏主意...
最后我检查了一下,PostgreSQL的dblink只能连接到其他PostgreSQL实例。我认为MySQL Proxy不会更好。您可能需要使用自己喜欢的语言(IE:Java等)从MySQL中读取信息,以便插入到PostgreSQL中……
posgresql 9直接支持bytea的十六进制语法,请参见此处:postgresql.org/docs/9.0/interactive/…(不过您需要一些sed)