mysql - 有没有什么工具可以将 MySQL SQL 转换为 PostgreSQL SQL?

标签 mysql postgresql

我们正在将数据库从 MySQL 迁移到 PostgreSQL,现有应用程序中的大部分 SQL 都需要重写。

我想知道是否有任何工具可以将MySQL SQL转换为PostgreSQL SQL,这样我们就可以避免手动一一重写这些SQL。

最佳答案

SQL 非常复杂,以至于使用通用工具来“理解”SQL 语句并以另一种语言生成兼容的等效项是不切实际的。特别是因为大多数 SQL 对数据做出隐式假设,但实际上并未在任何地方强制执行,因此 SQL 语句可能对一个数据集执行一件事,但在另一数据集上执行不同(且意外)的操作。您将如何编写一个工具来转换使用 session 变量的 MySQL 查询?或者使用可写公用表表达式的 PostgreSQL 查询?您不可能将其自动化。

您也许能够找到工具来自动执行简单的语法和方言更改以及常见的一对一函数替换,但仅此而已。除非您有大量简单、非常相似的 SQL 语句,否则此类工具不会大量使用。如果您有大量非常相似且可能最初是机器生成的语句,您可能需要考虑您的应用程序设计,因为这并不是一个真正的好方法。

您通常最好手动修复 SQL,可能是在进行一些简单的数据类型替换之后。

如果你首先修复你的 SQL 以便在 ANSI 和 STRICT 模式下运行的 MySQL 上正常工作,这将对你有很大帮助,这样你就会发现一些真正愚蠢的 MySQL 主义,你可以将你的代码更改为 ANSI 引用而不是MySQL的引用规则等

关于mysql - 有没有什么工具可以将 MySQL SQL 转换为 PostgreSQL SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15736495/

相关文章:

mysql - 用于在将数据从一个表传输到另一个表后更改数据的存储过程?

mysql - 创建插入更新后的触发器

sql - 插入并返回子查询

ruby-on-rails - Heroku rake 命令

mysql - 查询以根据 mysql 中每个项目的角色隔离用户

php - 如何让用户为不同的事件连续创建相同的 HTML 表单?

mysql - 如何使用cte删除mysql中的重复数据

sql - 单个表上的嵌套查询

postgresql - 使用命令中的副本未触发触发器

java - 是否可以只用一个查询来检索分成三个表的对象?