有没有一个简单的工具可以把mysql转换成postgresql语法?

a11xaf1n  于 2022-12-18  发布在  PostgreSQL
关注(0)|答案(9)|浏览(465)

我试过here列出的工具,有些比其他的更成功,但是没有一个能给我提供有效的postgres语法(tinyint错误等)。

m0rkklqb

m0rkklqb1#

有一个mysqldump选项可以输出PostgreSQL代码:

mysqldump --compatible=postgresql ...

但效果不太好。
相反,请将mysql-to-postgres工具视为described in Linus Oleander's answer

sgtfey8w

sgtfey8w2#

试试这个,效果很好!!

http://www.sqlines.com/online
qc6wkl3g

qc6wkl3g3#

在谷歌上搜索了一段时间后,我找到了this post
1.使用[sudo] gem install mysql2psql安装mysql2psql gem。
1.通过运行mysql2psql创建一个配置文件。你会看到一个错误,但是mysql2psql.yml文件应该已经被创建了。
1.编辑mysql2psql.yml
1.再次运行mysql2psql以迁移数据。
提示:如果您希望在迁移数据之前清除postgresql数据库,请在mysql2psql.yml配置文件中将force_truncate设置为true

wljmcqd8

wljmcqd84#

在Debian或Ubuntu上安装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,以便他能够实现真实的的线程。

在其他平台上安装

  • 要在Windows上安装pgloader,您可以使用Linux的Windows子系统。
  • 要在Mac上安装pgloader,您可以用途:brew install --HEAD pgloader .
a1o7rhls

a1o7rhls5#

我用的是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

camsedfj

camsedfj6#

看看PG Foundry,Postgres的额外实用程序往往就在那里,我相信你要找的工具确实存在。

oyxsuwqo

oyxsuwqo7#

有一个付费软件在这个postgresql页面上列出:http://www.postgresql.org/download/products/1
这是在pgFoundry上http://pgfoundry.org/projects/mysql2pgsql/

6qqygrtg

6qqygrtg8#

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.
vpfxa7rd

vpfxa7rd9#

你很可能永远不会得到一个工具来完成这样的任务,它会为你做所有的工作。准备好自己做一些重构工作。

相关问题