¿Cómo convertir una base de datos MySQL a PostgreSQL?

20

¿Existe alguna herramienta de línea de comandos para convertir la base de datos MySQL a PostgreSQL? También me gustaría saber si hay una manera de convertir la base de datos usando el mysqldumpcomando normal .

Mughil
fuente
1
Comience aquí: wiki.postgresql.org/wiki/…
a_horse_with_no_name
44
Cada vez que veo esto, lloro lágrimas de alegría.
rfusca
ora2pg.darold.net
a_horse_with_no_name
Esta es fácilmente una de las preguntas más útiles en todo este sitio.
Evan Carroll

Respuestas:

13

has probado:

mysqldump --compatible=postgresql dbname > export.sql

entonces haz esto para escapar de las comillas

sed "s/\\\'/\'\'/g" export.sql > export1.sql

Es posible que necesite más masajes, así que mire mysqldump doco más de cerca.

Nick Kavadias
fuente
2
He intentado el método dado por usted, pero está dando error al restaurar en el postgresql
Mughil
2
@Mughil, ¿cuál es el error?
Janus Troelsen
44
5 años y nadie ha arreglado mysqldumptodavía. syntax error at or near "(" LINE 2: "id" int(10) NOT NULL,
Cees Timmerman
1
De acuerdo con dev.mysql.com/doc/refman/8.0/en/…, el único valor permitido --compatibleesansi
phunehehe
7

Aquí hay algunas herramientas de código abierto que pueden ser muy útiles:

FromMySqlToPostgreSql es una herramienta de alcance de funciones y muy 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 COPIA PostgreSQL, por lo que la transferencia de datos es muy rápida.
FromMySqlToPostgreSql escrito en PHP (> = 5.4).

pgloader   es una herramienta de carga de datos para PostgreSQL, que usa el comando COPY. Su principal ventaja sobre solo usar

COPY
o
\copy
, y sobre el uso de un contenedor de datos extranjeros, es su comportamiento de transacción, donde pgloader mantendrá un archivo separado de datos rechazados, pero continuará tratando de copiar buenos datos en su base de datos. El comportamiento predeterminado de PostgreSQL es transaccional, lo que significa que cualquier línea errónea en los datos de entrada (archivo o base de datos remota) detendrá toda la carga masiva de la tabla. pgloader también implementa el reformateo de datos, un ejemplo típico de eso es la transformación de MySQL datestamps 0000-00-00 y 0000-00-00 00:00:00 a PostgreSQL
NULL
valor (porque nuestro calendario nunca tuvo un año cero).
pgloader escrito en LISP y distribuido como código fuente, por lo que debe compilarlo antes de usarlo.

Espero que te ayude...

AnatolyUss
fuente
1
pgloader es incluso una herramienta de migración recomendada en documentos de postgre, por lo que diría que es la mejor opción. Lo he usado con éxito en un DB bastante pequeño con más de 50 tablas, funcionó de maravilla.
Capaj
3

En realidad, existe una herramienta de migración gratuita que es bastante fácil de usar, desarrollada por EnterpriseDB. Se puede instalar a través de StackBuilder: Migration Toolkit

uygar.raf
fuente
3

Recientemente utilicé una herramienta no gratuita de DBConvert para convertir una base de datos de acceso a postgres, y encontré que valía la pena el dinero en comparación con la cantidad de tiempo que perdí tratando de hacerlo de forma confiable de forma gratuita. Vender una herramienta similar para MySQL <-> postgres , que no he usado, pero que vale la pena considerar a menos que solo esté interesado en las herramientas de línea de comandos.

En caso de que se pregunte, no estoy afiliado a ellos de ninguna manera :-)

Jack Douglas
fuente
3

Puede utilizar el Asistente de migración EnterpriseDB, por ejemplo.

Puede migrar Symply OracleDB. Pero para Mysql, tiene algunas limitaciones, por ejemplo, no admite vistas, disparadores, procedimientos almacenados.

Para obtener más información, consulte Kit de herramientas de migración de EDB . No estoy seguro, pero puede ser posible migrar mysql-> oracle-> postgresql guardando sus procedimientos almacenados (en caso de que existan).

Grep this: herramientas de migración de bases de datos y SQL

shcherbak
fuente
1

Esto es solo para agregar a las respuestas existentes, lo que me ayudó a encontrar esta solución. Solía FromMySqlToPostgreSql . Todo lo que necesita hacer es descargar y extraer FromMySqlToPostgreSql , hacer una copia del archivo de configuración de muestra, establecer los valores de conexión db y ejecutar el archivo de índice con el siguiente comando:

php index.php config.xml

Simple pero efectivo!

toing_toing
fuente
¿Podría editar su publicación con un enlace a esta herramienta, por favor?
dezso
Lo siento, lo olvidé. ¡Adicional!
toing_toing
Ah, esto es gracioso. ¿Te has dado cuenta de que el autor de la herramienta también ha publicado una respuesta? ;) Ahora lo hice.
dezso
¡Me halaga! Sin embargo, no ha descrito mucho sobre su propio complemento maravilloso.
toing_toing
0

Hay una herramienta de código abierto que proporciona funcionalidades para convertir una base de datos MySQL en Postgresql db, incluidos índices, fks y datos.

https://github.com/ggarri/mysql2psql

Esta herramienta también permite definir cambios de esquema para que pueda realizar algunas actualizaciones a su esquema actual en tiempo de ejecución.

Gabriel Garrido
fuente