如何将mysql转换为postgresql?[关闭]


14

我拼命寻找一个转换工具,将一个大的mysql数据库转换为postgresql。我需要的工具/脚本是:

  • 自由
  • 在Linux下工作
  • 易于使用,不会出错
  • 您实际上已尝试并确认有效
  • 最好不要用Java或Ruby编写

我尝试了此处列出的其他工具,但没有一个适合我。

先感谢您。


我不是PostgreSQL专家,仍然在学习自己。我删除了答案。但是,还有另一个关于将mysqldump与其他人发布的postgresql一起使用的问题:dba.stackexchange.com/q/9792/877。希望能帮助到你 !!!
RolandoMySQLDBA 2012年

1
用Java编写的工具有什么问题?如果您描述了所有这些都“ 不起作用 ”的情况,那么这可能会有所帮助。
a_horse_with_no_name 2012年

Answers:


7

两种截然不同的数据库管理系统之间迁移需要大量的不仅仅是迁移数据。但是,数据迁移通常是最容易的部分。

我尝试过的方法是免费的,我可以确认它是否有效:

  • 创建仅mysql模式的转储
  • 使用文本编辑器调整SQL并进行大量搜索和替换
  • 在Postgres中运行转换后的SQL
  • 从MySQL创建纯文本转储(例如CSV或其他分隔格式)
  • 使用PostgreSQL的COPY命令导入数据

如果您依靠MySQL的行为来接受非法数据(例如2月31日),则导入数据实际上可能会很困难。

我的猜测是,这比搜索工具,评估一堆工具然后尝试理解您选择的工具要快。但这取决于您指的是哪种“大”。如果数百个表很大,这可能不可行。如果big仅指行数,则这可能是最快的方法。

有一些工具可以以DBMS独立(XML)格式转储数据库模式,例如LiquibaseSchemaSpyWbSchemaReport。使用Liquibase可能是最容易使用的。其他人将需要一些手工编写/扩展XSLT来转换生成的XML。

如果您在MySQL中使用触发器和存储过程,那么我相信没有任何自动化工具可以转换它们而无需随后进行大量手动修复-然后生成的过程可能不会使用目标DBMS的任何高级功能。


6

最近不得不这样做,并且由于要花很长时间才能找到工具并且可以使用它进行操作,因此我亲自使用vim和replacement-foo进行了操作。

  • 替换INT NOT NULL AUTO_INCREMENT(或类似的东西)SERIAL
  • 改变相关成everythig串TEXT(无速度差在使用TEXTVARCHAR或类似的)
  • 摆脱那些反叛的人`
  • Postgres中没有存储引擎,因此请删除ENGINE InnoDB(或其他内容)
  • 去掉 UNSIGNED
  • 每个BLOB字段是 BYTEA
  • 字符串使用单引号'而不是其他任何东西
  • 如果您在9.1之前的某个地方使用了字符串连接,请小心,从9.1开始,Postgres支持将其CONCAT作为非标准字符串连接的后备。 'string' || ' string'
  • 重新编写任何程序代码...
  • 请注意保留的名称(例如,表,名称,...)以及大写名称。他们需要双引号"
  • 索引应该几乎相同,因为语法没有变化
  • 对于我忘记的一切,请查看有关此主题的Wikibooks

这些子弹中的每一个都应进行一次替换。

我出口的模式和数据seperatly。确保您使用INSERT而不是COPY。如果没有新事物发生,则数据(几乎)无需清理。确保一切正常UTF-8。使用2个单独的文件,该架构变得更易于管理,并且您没有1GB的文件可以编辑。

加载架构时,您会获得非常详细的错误信息,因此调试应该非常简单。


嗨,如何将MySQL的BLOB字段数据转换为PostgreSQL的BYTEA?我发现如果将Mysql的数据转储为插入sql,则无法在PostgreSQL中加载数据。
法郎2012年

1

我从未尝试过将它扔出去,但是Tungesten Replicator可能会做您想要的。它主要是一个复制工具,但我认为它可能具有引导过程,至少可以帮助您处理数据。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.