【发布时间】:2010-09-10 15:50:27
【问题描述】:
我已经尝试了here 列出的工具,其中一些比其他工具更成功,但没有一个能提供我可以使用的有效 postgres 语法(小错误等)
【问题讨论】:
标签: mysql database postgresql
我已经尝试了here 列出的工具,其中一些比其他工具更成功,但没有一个能提供我可以使用的有效 postgres 语法(小错误等)
【问题讨论】:
标签: mysql database postgresql
有一个 mysqldump 选项可以输出 PostgreSQL 代码:
但这不太好用。
相反,请将mysql-to-postgres 工具视为described in Linus Oleander's answer。
【讨论】:
mysqldump --compatible=ansil
试试这个,效果很赞!!
http://www.sqlines.com/online
【讨论】:
在 Google 上搜索了一段时间后,我找到了this post。
[sudo] gem install mysql2psql 安装mysql2psql gem。mysql2psql 创建配置文件。您会看到一个错误,但应该已经创建了一个 mysql2psql.yml 文件。mysql2psql.yml
mysql2psql 以迁移您的数据。提示:如果您希望在迁移数据之前清除 postgresql 数据库,请在 mysql2psql.yml 配置文件中将 force_truncate 设置为 true。
【讨论】:
在 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,以便他可以实现真正的线程。
To install pgloader on Windows,您可以使用适用于 Linux 的 Windows 子系统。
To install pgloader on Mac,您可以使用:brew install --HEAD pgloader。
【讨论】:
我用过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.
【讨论】:
看看PG Foundry,Postgres 的额外实用程序往往会在那里。我相信您正在寻找的工具确实存在。
【讨论】:
这个 postgresql 页面上列出了一款付费软件: http://www.postgresql.org/download/products/1
这是在 pgFoundry 上: http://pgfoundry.org/projects/mysql2pgsql/
【讨论】:
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.
【讨论】:
您很可能永远不会获得可以为您完成所有工作的此类任务的工具。准备好自己做一些重构工作。
【讨论】: