
Hace unas semanas que empecé un nuevo proyecto en J2EE. Como soy un chico ordenado, me gusta desarrollar mi esquema de base de datos con algún editor visual tipo Visio, o el propio MySQL Workbench, que para este proyecto es el que utilicé. Así pues, me puse a ello y como siempre la cosa se fue complicando. Al final el desarrollo del esquema de entidad relación me llevó más de lo que pensaba, pero ya lo tenía.

Era momento de exportar todo a un archivo SQL, MySQL Workbench tiene una bonita opción para exportar los datos a un archivo SQL, para luego poder crear la base de datos con ese fichero creado. Fue exactamente en este punto cuando me dí cuenta de que el proyecto requería que la base de datos fuera PostgreSQL.
Sé que la sintaxis entre ambas bases de datos es parecida, y cambiarla, aunque sería entretenido, no supondría ningún problema. Aún así, pensé en que tenía que existir alguna herramienta para ello. Y rápidamente di con PGLOADER.
Este script promete migar estructura y datos de una MySQL a una PostgreSQL con un solo comando. Y puedo verificar que así es, además de esta funcionalidad ofrece múltiples opciones a la hora de elegir la fuente de la migración (CSV, SQLITE, etc)
Tras solucionar, junto con su desarrollador (Dimitri Fontaine) , unos problemas con la versión del script, conseguí migar estructura y datos de mi MySQL a PostgreSQL, estos son los pasos que realicé (sobre Ubuntu64 16.04) .
Actualizamos e instalamos paquetes necesarios:
$apt-get update $apt-get upgrade $apt-get install sbcl unzip libsqlite3-dev make curl gawk freetds-dev libzip-dev
Instalamos el script:
$apt-get install pgloader
En este punto tengo que decir que la versión del repositorio no estaba actualizada, así que tuve que bajar los archivos fuentes de la web y compilarlos en mi máquina, algo bien sencillo en cualquier caso.
Creamos el archivo de configuración, en mi caso:
$nano mydb.load LOAD DATABASE FROM mysql://usuarioMySQL:Password@192.168.1.100:3306/mydb INTO postgresql://UsuarioPostgreSQL:Password@192.168.1.100:5432/mydb WITH include drop, create tables, no truncate, create indexes, reset sequences, foreign keys SET maintenance_work_mem to '128MB', work_mem to '12MB';
Guardo el archivo y ejecuto:
$pgloader mydb.load
2016-07-07T11:35:53.035000Z LOG Main logs in '/tmp/pgloader/pgloader.log'
2016-07-07T11:35:53.038000Z LOG Data errors in '/tmp/pgloader/'
2016-07-07T11:35:53.038000Z LOG Parsing commands from file #P"/home/mydb.load"
table name read imported errors time
---------------------- --------- --------- --------- --------------
fetch meta data 39 39 0 1.501s
create, drop 0 26 0 2.807s
---------------------- --------- --------- --------- --------------
cargos 0 0 0 0.144s
certificaciones 0 0 0 0.099s
clasificaciones 0 0 0 0.095s
composiciones 0 0 0 0.099s
estados_facturas 0 0 0 0.106s
estados_solicitud 0 0 0 0.089s
facturas 0 0 0 0.133s
marcas 0 0 0 0.099s
productos 0 0 0 0.112s
solicitudes 0 0 0 0.121s
tarifas 0 0 0 0.117s
tipos_tarifas 0 0 0 0.112s
usuarios 0 0 0 0.112s
Index Build Completion 0 0 0 0.000s
---------------------- --------- --------- --------- --------------
Create Indexes 38 39 0 2.279s
Reset Sequences 0 12 0 0.323s
Primary Keys 13 13 0 0.396s
Foreign Keys 26 26 0 0.803s
Comments 0 0 0 0.000s
---------------------- --------- --------- --------- --------------
Total import time 0 0 0 7.268s


Con estos sencillos pasos consigo migrar la estructura y datos de una base de datos a otra respetando claves primarias, claves foráneas, etc…
Recomiendo examinar detenidamente las posibilidades del script desde su página web http://www.pgloader.oi , ya que posee múltiples opciones de configuración, casting de datos etc… sinceramente lo veo una herramienta bastante práctica.