我们正在将我们的数据库从MySQL迁移到PostgreSQL,并且我们现有应用程序中的大多数SQL都需要重写。
我想知道是否有任何工具可以将MySQL SQL转换为PostgreSQL SQL,这样我们就可以避免手动逐个重写这些SQL。
答案 0 :(得分:1)
SQL足够复杂,以至于“理解”SQL语句并在另一种方言中生成兼容的等价物的通用工具将是不切实际的。特别是因为大多数SQL对未在任何地方实际执行的数据做出隐含的假设,因此SQL语句可能在一个数据集上做一件事但在另一个数据集上有不同(和意外)的事情。你会如何编写一个工具来转换使用会话变量的MySQL查询?或PostgreSQL查询使用可写的公用表表达式?你无法实现自动化。
您可能能够找到自动化简单语法和方言更改以及常见的一对一功能替换的工具,但这就是它。除非你有大量简单,非常相似的SQL语句,否则这些工具并没有大量使用。如果您有大量非常相似且可能最初由机器生成的语句,您可能需要考虑您的应用程序设计,因为这不是一个好方法。
通常可以手动修复SQL,可能是在一些简单的数据类型替换之后。
如果您首先修复SQL以在ANSI和STRICT模式下运行的MySQL上正常工作,那将对您有所帮助,因此您可以捕获一些非常愚蠢的MySQL-isms,您可以将代码更改为ANSI引用而不是MySQL的引用规则等