我需要将数据从MySQL迁移到Postgres。编写一个连接到MySQL和Postgres的脚本很容易,在MySQL端运行一个select并在Postgres端插入,但它很慢(我有+ 1M行)。将数据写入平面文件然后导入它会快得多。
MySQL命令行可以非常快速地下载表并将它们作为制表符分隔值输出,但这意味着执行我脚本外部的程序(通过将其作为shell命令执行并将输出保存到文件或通过读取直接来自stdout)。我正在尝试使用Python而不是MySQL客户端下载数据。
有没有人知道MySQL命令行执行哪些步骤和调用来查询大型数据集并将其输出到stdout?我认为可能只是客户端在C中并且应该比Python快得多,但MySQL的Python绑定本身就是C所以......任何想法?
答案 0 :(得分:0)
我认为问题在于您在一个单独的事务中插入每一行(这是在没有显式启动事务的情况下运行SQL查询时的默认行为)。在这种情况下,数据库必须在每个INSERT
上写入(刷新)磁盘更改。它比在单个事务中插入数据慢100倍。尝试在导入数据之前运行BEGIN
,并在之后运行COMMIT
。