script postgres pgloader online convertir convert mysql postgresql migration dump

pgloader - Migración de MySql a PostgreSql



mysql to postgresql online (8)

Es un poco más complicado que eso. Hay mucha documentación aquí:

http://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL#MySQL

Allí, también encontrará scripts de conversión.

Mi PostgreSQL está instalado en Windows. ¿Cómo puedo migrar datos de la base de datos MySQL a PostgreSQL? He leído toneladas de aricles. Nada ayuda :(

Gracias.

Mis acciones:

  1. volcado de mysql:

    mysqldump -h 192.168.0.222 --port 3307 -u root -p --compatible=postgresql synchronizer > c:/dump.sql

  2. crear sincronizador db en pgsql

  3. volcado de importación:

    psql -h 192.168.0.100 -d synchronizer -U postgres -f C:/dump.sql

  4. salida:

    psql:C:/dump.sql:17: NOTICE: table "Db_audit" does not exist, skipping DROP TABLE psql:C:/dump.sql:30: ERROR: syntax error at or near "(" СТРОКА 2: "id" int(11) NOT NULL, ^ psql:C:/dump.sql:37: ERROR: syntax error at or near ""Db_audit"" СТРОКА 1:LOCK TABLES "Db_audit" WRITE; ^ psql:C:/dump.sql:39: ERROR: relation "Db_audit" does not exist СТРОКА 1:INSERT INTO "Db_audit" VALUES (4068,4036,4,1,32,''2010-02-04 ... ^ psql:C:/dump.sql:40: ERROR: relation "Db_audit" does not exist СТРОКА 1:INSERT INTO "Db_audit" VALUES (19730,2673,2,2,44,''2010-11-23... ^ psql:C:/dump.sql:42: ERROR: syntax error at or near "UNLOCK" СТРОКА 1:UNLOCK TABLES; ^ psql:C:/dump.sql:48: NOTICE: table "ZHNVLS" does not exist, skipping DROP TABLE psql:C:/dump.sql:68: ERROR: syntax error at or near "(" СТРОКА 2: "id" int(10) unsigned NOT NULL, ^ psql:C:/dump.sql:75: ERROR: syntax error at or near ""ZHNVLS"" СТРОКА 1:LOCK TABLES "ZHNVLS" WRITE; ^ psql:C:/dump.sql:77: WARNING: nonstandard use of escape in a string literal СТРОКА 1:...???????? ??? ???????'',''10'',''4607064820115'',''0'','''',''??????-??... ^ ПОДСКАЗКА: Use the escape string syntax for escapes, e.g., E''/r/n''. Cancel request sent psql:C:/dump.sql:77: WARNING: nonstandard use of escape in a string literal СТРОКА 1:...??????????? ????????'',''10'',''4602784001189'',''0'','''',''???????? ...


Mi experiencia con MySQL -> La migración de Postgresql no fue muy agradable, así que tuve que secundar la sugerencia de Daniel sobre los archivos CSV.

En mi caso, recreé el esquema a mano y luego importé todas las tablas, una a una, usando mysqldump y pg_restore.

Por lo tanto, aunque este volcado / restauración puede funcionar para los datos, lo más probable es que no tenga suerte con el esquema. No he probado ninguna solución comercial, así que vea lo que dicen otras personas y ... ¡buena suerte!

ACTUALIZACIÓN : Miré el código que dejó el proceso y así es cómo lo hice.

Tenía un pequeño esquema diferente en mi PostgreSQL db, por lo que algunas tablas se unieron, algunas se dividieron. Esta es la razón por la que la importación directa no era una opción y mi caso es probablemente más complejo de lo que usted describe y esta solución puede ser una exageración.

Para cada tabla en la base de datos PG escribí una consulta que selecciona los datos relevantes de la base de datos MySQL. En caso de que la tabla sea básicamente la misma en ambas bases de datos, y no haya uniones, puede ser tan simple como esto

select * from mysql_table_name

Luego exporté los resultados de esta consulta a XML, para hacer esto debes ejecutarlo así:

echo "select * from mysql_table_name" | mysql [CONNECTION PARAMETERS] -X --default-character-set=utf8 > mysql_table_name.xml

Esto creará un archivo XML simple con la siguiente estructura:

<resultset statement="select * from mysql_table_name"> <row> <field name="some_field">field_value</field> ... </row> ... </resultset>

Luego, escribí un script, que produce una instrucción INSERT para cada elemento de fila en este archivo XML. El nombre de la tabla, donde insertar los datos se dio como un parámetro de línea de comandos para este script. Script de Python , en caso de que lo necesite.

Estas sentencias sql se escribieron en un archivo y luego se enviaron a psql de esta manera:

psql [CONNECTION PARAMETERS] -f FILENAME -1

El único truco que había en XML -> la transformación SQL es reconocer números y desmarcarlos.

Para resumir: mysql puede producir resultados de consultas como XML y puede usarlo.


En mi caso bastante simple (30 tablas, 10000 registros), utilicé una secuencia de comandos de Perl:

http://pgfoundry.org/frs/?group_id=1000198

Resolvió el archivo de volcado mysql y produjo un archivo de volcado de pg, con los siguientes problemas.

Estaba importando a Heroku, así que usé su plugin pgbackups que funcionó casi sin problemas.

Problemas a tener en cuenta

  1. Tipos de datos booleanos MySQL almacena estos como 0 y 1. PostGreSQL los almacena como t y f. Mira que los booleanos no se migran como enteros.
  2. Aumento automático de ID. Puede encontrar que sus identificadores comienzan a contar nuevamente desde 1. Obtendrá errores como este: "el valor duplicado de la clave viola la restricción única ...". Es fácil de arreglar, pero ten cuidado.

He usado py-mysql2pgsql para convertir una gran base de datos MySQL en Postgres. Maneja la mayoría de los casos muy bien. Sin embargo, tuve que parcharlo para un par de casos específicos para mis necesidades.

https://pypi.python.org/pypi/py-mysql2pgsql

Por defecto, lee datos de MySQL y escribe en Postgres. Pero puede pedirle que escriba el esquema y / o los datos en un archivo para su inspección antes de cargarlos en Postgres.




Es mucho mejor usar algún programa que automatice el proceso de migración. Incluso si está familiarizado con todos los problemas, hacer cada paso a mano puede llevar mucho tiempo, especialmente cuando su DB es "grande".

Pruebe FromMySqlToPostgreSql .

Esta herramienta es de alcance funcional y fácil de usar. Mapea tipos de datos, migra restricciones, índices, PK y FK exactamente como estaban en su base de datos MySQL. Bajo el capó utiliza COPY de PostgreSQL, por lo que la transferencia de datos es muy rápida.


Aquí hay un proyecto que migra en pareja ordena su base de datos MySQL actual a Postgresql incluyendo índices y claves foráneas. También permite definir el nombre, los índices y el análisis de tipo de columna para que pueda sobrescribir el comportamiento predeterminado.

https://github.com/ggarri/mysql2psql

Espero que pueda ser útil para cualquiera de ustedes que esté interesado en migrar su proyecto actual a PG, en nuestro caso obtuvimos un aumento de rendimiento de alrededor del 20%.