Ser*_*sev 15 mysql postgresql migration
我现在正在将我的 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
Run Code Online (Sandbox Code Playgroud)
但它非常大(> 20 Gb)。
我尝试使用 mysqldump 的 --hex-blob 参数 - 但是当我尝试将结果转储文件用作命令文件时,PostgreSQL 不接受这种格式的数据。我尝试过的另一个选项是使用 --tab 选项来获取转储,然后使用 COPY 命令将其插入到 PostgreSQL - 但是 --hex-blob 不能使用 --tab 并且 PostgreSQL 仍然不接受转储文件说那里是其中的无效字符。
我很乐意就此事获得任何建议 - 尽管我开始认为编写自定义迁移工具毕竟不是一个坏主意......
小智 14
我认为最简单的方法是使用该--hex-blob
开关打开mysqldump
并通过 psql 恢复,使用decode(string text, type text)
. 然而,这并不是那么简单,因为您需要更改一些生成的转储(sed、awk),添加解码功能。例如:
mysqldump -u root -p --skip-quote-names --hex-blob --skip-triggers \
--compact --no-create-info mysql samples > prepg.dump
sed "s/0x\([0-9,A-F]*\))/decode('\1','hex'))/g" prepg.dump > pg.dump
Run Code Online (Sandbox Code Playgroud)
psql 会话:
CREATE TABLE samples
(
file_id integer PRIMARY KEY,
file bytea
);
\i 'path/to/pg.dump'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11584 次 |
最近记录: |