有没有一个简单的工具将mysql转换为postgresql语法?

时间:2008-09-18 12:24:46

标签: mysql database postgresql

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

9 个答案:

答案 0 :(得分:10)

mysqldump选项使其输出PostgreSQL代码:

mysqldump --compatible=postgresql ...

答案 1 :(得分:3)

在Google上停留一段时间后,我找到了this post

  1. 使用[sudo] gem install mysql2psql安装mysql2psql gem。
  2. 运行mysql2psql创建配置文件。您将看到错误,但应创建mysql2psql.yml文件。
  3. 修改mysql2psql.yml
  4. 再次运行mysql2psql以迁移您的数据。
  5. 提示:如果您希望在迁移数据之前清除postgresql数据库,请在force_truncate配置文件中将true设置为mysql2psql.yml

答案 2 :(得分:1)

我使用了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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

This page列出了语法差异,但还没有找到一个简单的工作查询转换器。使用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语句,SQLines会将大部分语句转换为在线语句。之后我仍然需要编辑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.

答案 5 :(得分:0)

尝试这个,它就像魅力一样!

http://www.sqlines.com/online

答案 6 :(得分:0)

在 Debian 和相关设备上安装 pgloader

sudo apt install pgloader

以 postgres 用户身份登录并创建数据库

sudo su postgres
createdb -O user db_migrated

将数据从mysql数据库传输到postgresql

pgloader mysql://user@localhost/db postgresql:///db_migrated

还要检查 Dimitri Fontaine's rewrite of pgloader from python to common lisp 以便他可以实现真正的线程。

答案 7 :(得分:-1)

看看PG Foundry,Postgres的额外工具往往住在那里。我相信你所寻找的工具确实存在。

答案 8 :(得分:-1)

你很可能永远不会得到一个可以完成你所有工作的工具。准备好自己做一些重构工作。