¿Cómo convertir mysql a postgresql? [cerrado]

14

Estoy buscando desesperadamente una herramienta de conversión para convertir una gran base de datos mysql a postgresql. Necesito que la herramienta / script sea:

  • Gratis
  • Funciona bajo Linux
  • Fácil de usar y sin errores.
  • Realmente intentaste y confirmas que funciona
  • Preferiblemente, no escrito con Java o Ruby

He probado diferentes herramientas enumeradas aquí , pero ninguna funcionó para mí.

Gracias de antemano.

hbp
fuente
No soy un experto en PostgreSQL, todavía estoy aprendiendo. Quité mi respuesta. Sin embargo, hay otra pregunta sobre el uso de mysqldump con postgresql publicado por otra persona: dba.stackexchange.com/q/9792/877 . Espero eso ayude !!!
RolandoMySQLDBA
1
¿Qué hay de malo con las herramientas escritas en Java? Y podría ayudar si describiera qué es exactamente " no funciona " con todos ellos.
a_horse_with_no_name

Respuestas:

7

La migración entre dos DBMS muy diferentes requiere mucho más que solo migrar los datos. Pero la migración de los datos suele ser la parte más fácil.

La forma en que lo intenté, que es gratis y puedo confirmar que funciona:

  • crear un volcado solo de esquema mysql
  • Ajuste el SQL usando un editor de texto y mucha búsqueda y reemplazo
  • ejecutar el SQL convertido en Postgres
  • Cree un volcado de texto sin formato desde MySQL (por ejemplo, CSV u otro formato delimitado)
  • importar los datos usando el comando COPIA de PostgreSQL

Importar los datos podría ser realmente difícil si confiara en el comportamiento de MySQL para aceptar datos ilegales (como el 31 de febrero)

Supongo que esto será más rápido que buscar una herramienta, evaluar un montón de ellas y luego tratar de entender la que elegiste. Pero depende de a qué tipo de "grande" se refiera. Si grande es varios cientos de tablas, esto podría no ser factible. Si grande solo se refiere al número de filas, entonces esta es probablemente la forma más rápida de hacerlo.

Existen algunas herramientas que pueden volcar un esquema de base de datos en un formato independiente de DBMS (XML), como Liquibase , SchemaSpy o WbSchemaReport . Con Liquibase probablemente sea el más fácil de usar. Los otros requerirán un trabajo manual escribiendo / extendiendo el XSLT para transformar el XML generado.

Si está utilizando desencadenantes y procedimientos almacenados en MySQL, no creo que haya una herramienta automatizada que pueda traducirlos sin requerir una reparación manual importante después, y luego los procedimientos generados probablemente no usarían ninguna función avanzada del DBMS objetivo .

un caballo sin nombre
fuente
6

Tuve que hacerlo recientemente y dado que me habría llevado demasiado tiempo buscar una herramienta y poder hacer cosas con ella, lo hice a mano con vim y substitution-foo

  • reemplazar INT NOT NULL AUTO_INCREMENT(o algo como esto) conSERIAL
  • cambiar everythig cadena relacionada en un TEXT(sin diferencia de velocidad en el uso de TEXT, VARCHARo similar)
  • deshacerse de esos malditos backticks '
  • no hay motores de almacenamiento en Postgres, así que elimine ENGINE InnoDB(o lo que sea)
  • eliminar UNSIGNED
  • cada campo BLOB es BYTEA
  • las cadenas usan comillas simples 'y nada más
  • tenga cuidado si usa la concatenación de cadenas en alguna parte, comenzando desde 9.1, el soporte de Postgres CONCATcomo respaldo para la concatenación de cadenas no estándar, antes de 9.1 se hizo usando 'string' || ' string'
  • reescribir cualquier código de procedimiento ...
  • tenga cuidado con los nombres reservados (por ejemplo, tabla, nombre, ...) así como los nombres en mayúsculas. Necesitan ser doblemente citadas"
  • Indexado debería ser más o menos lo mismo ya que la sintaxis no varía
  • Para todo lo que he olvidado, mira los wikilibros sobre este tema.

Cada una de esas balas debe hacerse con una sola sustitución.

Exporté el esquema y los datos por separado . Asegúrese de usar INSERTs en lugar de COPY. Si no están sucediendo cosas financieras, los datos deberían requerir (casi) ninguna limpieza. Asegúrate de que todo esté encendido UTF-8. Con 2 archivos separados, el esquema se vuelve más manejable y no tiene un archivo de 1GB para editar.

Al cargar el esquema, obtiene información bastante detallada sobre dónde se encuentra un error, por lo que la depuración debería ser bastante simple.

DrColossos
fuente
Hola, ¿cómo convertir datos de campo BLOB de MySQL a BYTEA de PostgreSQL? Encontré que si vuelco los datos de Mysql como insert sql, no puedo cargar los datos en PostgreSQL.
francos
1

Estoy lanzando esto por ahí, nunca lo he intentado, pero Tungesten Replicator puede hacer lo que quieras. Es principalmente una herramienta de replicación, pero creo que puede tener un proceso de arranque que puede ayudarlo al menos con la pieza de datos.

Aaron Brown
fuente