lunes, 24 de junio de 2013

Cómo migrar de SQL Server (MS SQL) a PostgreSQL | Tablas + Datos | Tutorial paso a paso

"Luego de un largo período de inactividad y de depresión porque pensé que había perdido todos los screen shot del paso a paso que había hecho para este post, que fue lo que me llamó a armarme un blog, estoy de vuelta. Parece que mi escritorio estaba bastante desordenado porque al instalar Win8, mágicamente encontré una carpeta llamada IMG con todos los screen shot para este post, así que tomé valor para volver a escribir. 
Bueno, mucho bla bla, ahora vamos al grano. La verdad no encontré (o busqué muy mal) ningún sitio web que me explique cómo migrar de SQL Server a Postgres. El fin de este post no es explicar los motivos o razones para migrar (de eso hay mucho para ampliar, recomiendo leer SQL Server vs PostgreSQL, entre tantos otros), cada usuario tendrá lo suyo: postgres ofrece una mayor estabilidad, extensibilidad, es multiplataforma (corre en Win y Linux), otro tipo de licencia, no me gusta microsoft, etc. En fin, empecemos de una vez"

Siendo este un post destinado a un nivel intermedio-avanzado no me voy a detener en pasos sencillos como crear BD, manejar la consola de Windows, cambiar extensiones de archivo, etc. Existen otros tutoriales para eso.


Requisitos iniciales:

Tener instalada en el mismo Windows los motores SQL Server 2008 y PostgreSQL.

  • Descargar el driver JDBC de SQL Server (lo pueden hacer gratuitamente desde la página oficial de Microsft        - Driver JDBC SQL Server.
  • Descargar el Toolkit Migration de PostgreSQL, para lo cual comenzaré explicando la serie de pasos

Pasos:

Dentro del grupo de aplicaciones que nos instala PostgreSQL 9, encontramos Application Stack Builder,que nos permite agregar o quitar herramientas extras para manejar el motor. Lo ejecutamos:




Cliqueamos next y activamos el check de Migration Toolkit, para descargarlo e instalarlo debemos registrarnos en www.enterprisedb.com

 En la carpeta lib debemos copiar el driver JDBC de SQL Server que descargamos en pasos anteriores.
Antes que nada debemos crear una nueva base de datos (vacía) en PostgreSQL, será nuestro target, es decir, hacia donde se migrará la BD de SQL Server, nuestra BD destino.

Vista con PgAdmin

Ahora configuraremos los parámetros de conexión. Editaremos el archivo toolkit.properties con el bloc de notas o agregando la extensión .txt (recordar dejarlo con .properties).


Prestar atención a los parámetros, deben estar TAL CUAL, se ven en la siguiente imágen. Lo único que deben modificar son:

  • nombreBD: Nombre de la base de datos a migrar (en mi caso llamé a las de los dos motores por igual)
  • Usuarios y contraseñas source y target: Las dos conexiones deben estar autenticadas con usuario y contraseña (los usuarios y contraseñas por defecto de estos motores son lo que se muestran a continuación).


Abrimos la consola de Windows(Ejecutar cmd) y nos ubicamos en el path del migration toolkit.
Si tiramosun runMTK.bat -help veremos la ayuda de todos los parámetros posibles.

 Ahora bien los que usaremos para copiar tanto las tablas como los datos es el siguiente:

Ver últimas 2 líneas, lo anterior corresponde a otro proceso.

Pasado en limpio:


runMTK.bat -sourcedb type sqlserver -targetdbtype postgres -allTables -targetSchema public dbo

 Presionamos nuestro amigo el "enter" y...



 Más de 9400 filas han sido copiadas en la tabla turnohis!

Si señores, nuestra migración ha sido realizada con éxito. En este caso usé una base de prueba en SQL Server 2008 que contenía campos tinyint que no son permitidos en PostgreSQL, ya que quería mostrar el resúmen final. Por lo que de 168 tablas me migró 150, como vimos.
Podemos visualizar los resultados en los archivos log que se generan automáticamente...

Para corroborar, ejecutamos una consulta en nuestra base de datos destino, ya sea con PgAdmin o consola, como más les guste:



Felicidades! La migración ha sido exitosa. Tenemos nuestras tablas y datos en PostgreSQL!


Espero poder haber sido de ayuda, cualquier cosa me consultan.

Testeado con W7 - SQL Server 2008 - PostgreSQL

Saludos nerdianos!


--------------------------------------------------------------------------------------------------------
17/07/2014

Solución al error: java.lang.Exception: Network error IOException: Connection refused: connect

https://cgsrv1.arrc.csiro.au/blog/2010/05/24/java-sql-sqlexception-network-error-ioexception-connection-refused-connect-sql-express/