我已经尝试过列出的工具 这里, ,有些比其他更成功,但没有一个给我可以使用的有效的 postgres 语法(tinyint 错误等)

有帮助吗?

解决方案

有一个 mysqldump 使其输出 PostgreSQL 代码的选项:

mysqldump --compatible=postgresql ...

其他提示

在谷歌上一段时间后我发现 这个帖子.

  1. 安装 mysql2psql 宝石使用 [sudo] gem install mysql2psql.
  2. 通过运行创建配置文件 mysql2psql. 。你会看到一个错误,但是 mysql2psql.yml 文件应该已经创建。
  3. 编辑 mysql2psql.yml
  4. 跑步 mysql2psql 再次迁移您的数据。

提示:放 force_truncatetrue 在你的 mysql2psql.yml 如果您希望在迁移数据之前清除 postgresql 数据库,请修改配置文件。

我用过 py-mysql2pgsql. 。安装后只需要 yml 格式的简单配置文件(源,目标),例如:

# if a socket is specified we will use that
# if tcp is chosen you can use compression
mysql:
 hostname: localhost
 port: 3306
 socket: /tmp/mysql.sock
 username: mysql2psql
 password:
 database: mysql2psql_test
 compress: false
destination:
 # if file is given, output goes to file, else postgres
 file:
 postgres:
  hostname: localhost
  port: 5432
  username: mysql2psql
  password:
  database: mysql2psql_test

用法:

> py-mysql2pgsql -h
usage: py-mysql2pgsql [-h] [-v] [-f FILE]

Tool for migrating/converting data from mysql to postgresql.

optional arguments:
  -h, --help            show this help message and exit
  -v, --verbose         Show progress of data migration.
  -f FILE, --file FILE  Location of configuration file (default:
                        mysql2pgsql.yml). If none exists at that path,
                        one will be created for you.

更多内容请参见其主页 https://github.com/philipsoutham/py-mysql2pgsql.

这个 postgresql 页面上列出了一款付费软件:http://www.postgresql.org/download/products/1

这是在 pgFoundry 上:http://pgfoundry.org/projects/mysql2pgsql/

这一页 列出了语法差异,但我还没有找到一个简单的工作查询转换器。使用 ORM 包而不是原始 SQL 可以防止这些问题。

我目前正在为遗留代码库编写一个转换器:

function mysql2pgsql($mysql){
    return preg_replace("/limit (\d+), *(\d+)/i", "limit $1 offset $2", preg_replace("/as '([^']+)'/i", 'as "$1"', $mysql)); // Note: limit needs order
}

为了 CREATE 声明, SQL线 将其中大部分转换为在线。不过,之后我仍然需要编辑 mysqldump:

"mediumtext" -> "text", "^LOCK.*" -> "", "^UNLOCK.*" -> "", "`" -> '"', "'" -> "''" in 'data', "0000-00-00" -> "2000-01-01", deduplicate constraint names, " CHARACTER SET utf8 " -> " ".
"int(10)" -> "int" was missed in the last table, so pass that part of the mysqldump through http://www.sqlines.com/online again.

试试这个,它很有魅力!

http://www.sqlines.com/online

看一下 PG代工厂, ,Postgres 的额外实用程序往往驻留在其中。我相信您正在寻找的工具确实存在。

您很可能永远不会找到可以完成您所有工作的工具来完成此类任务。准备好自己做一些重构工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top