Hay una sencilla herramienta para convertir de mysql a postgresql sintaxis?
-
01-07-2019 - |
Pregunta
Yo he probado las herramientas de la lista aquí, algunos con más éxito que otros, pero ninguno me dio válida postgres sintaxis podría utilizar (tinyint errores, etc.)
Solución
Hay un mysqldump
la opción que hace que la salida de PostgreSQL código:
mysqldump --compatible=postgresql ...
Otros consejos
Después de algún tiempo en Google he encontrado este post.
- Instalar el mysql2psql gema utilizando
[sudo] gem install mysql2psql
. - Crear un archivo de configuración mediante la ejecución de
mysql2psql
.Usted verá un error, pero unmysql2psql.yml
el archivo debe haber sido creado. - Editar
mysql2psql.yml
- Ejecutar
mysql2psql
de nuevo a migrar sus datos.
Sugerencia:Conjunto force_truncate
a true
en su mysql2psql.yml
archivo de configuración si desea que la base de datos postgresql para ser limpiado antes de la migración de datos.
He usado py-mysql2pgsql.Después de la instalación, sólo necesita simple archivo de configuración en yml formato (fuente, destino), por ejemplo:
# 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
Uso:
> 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.
Más información en su página de inicio https://github.com/philipsoutham/py-mysql2pgsql.
Hay una pieza de pagar el software que aparece en este postgresql página:http://www.postgresql.org/download/products/1
y esto es en pgFoundry:http://pgfoundry.org/projects/mysql2pgsql/
Esta página enumera las diferencias en la sintaxis, sino un simple trabajo de consulta convertidor no he encontrado todavía.El uso de un ORM paquete en lugar de sentencias SQL de prevenir estos problemas.
Actualmente estoy poniendo un convertidor de un legado codebase:
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
}
Para CREATE
las declaraciones, SQLines convierte la mayoría de ellos en línea.Todavía tuve que editar el mysqldump después, aunque:
"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.
Prueba con ésta , funciona como un encanto !!
http://www.sqlines.com/online
Eche un vistazo a PG Fundición, utilidades extra para Postgres tienden a vivir allí.Yo creo que la herramienta que estás buscando no existe, aunque.
lo más probable es que nunca obtener una herramienta para la tarea que iba a hacer todo el trabajo por usted.esté preparado para hacer algo de refactorización trabajo usted mismo.