Grimpi IT Blog

abril 22, 2011

Como migrar una base de datos de SQL Server a PostgreSQL

Filed under: Migrador, PostgreSQL, SQL Server — grimpi @ 11:20 pm

Hace poco tuve que migrar varias bases de datos de SQL Server a PostgreSQL 8.4. Si bien existen varias maneras de hacer esto, no encontré ninguna herramienta fiable y gratis que me permita realizar esta operación. Por supuesto que si estamos dispuestos a pagar, existen utilidades de conversión de bases de datos y algunas muy buenas. Pero gratis, nada que funcione decentemente. Por lo tanto, aprovechando bastante código que ya tenía escrito para otra cosa, decidí hacer mi propio conversor de bases de datos de SQL Server 2005/2008 a PostgreSQL 8.4, que subo para que cualquiera la pueda probar y ahorrarse tiempo y dinero. La aplicación es muy sencilla: ingresamos el connection string de la base de datos de SQL Server y presionamos el botón “Generar Script”. Esto va a generar un codigo SQL en la caja de texto de la aplicación que deberemos copiar y ejecutarlo en algún lugar.

Qué cosas migra este utilitario?
• Schemas
• Tablas
• Constraints (Primary Keys, Unique Keys, Foreign Keys)
• Indices
• Tipos de datos (Domains en PostgreSQL)
• Vistas (Si el código SQL utilizado es compatible con PostgreSQL, no vamos a tener problemas, de lo contrario, tendremos que modificarlo manualmente para hacerlo compatible).
• Comentarios (Extended Properties en SQL Server)

Qué cosas no migra?
• Datos (para eso podemos utilizar algún ETL o SSIS)
• Store procedures/funciones/triggers (La aplicación sin embargo, nos permite generar el script de estos objetos, para que luego los modifiquemos manualmente).

Adicionalmente, este utilitario agrega un par de funciones que existen en SQL Server y no en PostgreSQL como por ejemplo “newid()”, cuando usamos columnas tipo ROWGUID en SQL Server.
También se genera un trigger automáticamente, cuando existe una columna Computed, ya que esta feature no existe en PostgreSQL. Tiene una mínima inteligencia en algunos aspectos, que nos pueden ahorrar mas tiempo todavía. Por ejemplo, cuando encuentra que se llama a la función GetDate(), se reemplaza por su homologa en PostgreSQL que es now(). Lo mismo hago para DatePart y un par de funciones mas.

Esta aplicación es muy básica, pero potente. No garantizo que funcione en todos los escenarios ni que sea infalible. Pero me ha servido para convertir bases de datos muy complejas de manera muy rapida y creo que puede servir a muchos.

La aplicación se puede bajar de esta URL.

Toda sugerencia, queja, critica sera bievenida.

23 comentarios »

  1. Aunque uno nunca sabe, dudo que alguna vez me toque lidiar con una migración de este tipo.
    No obstante lo cual aprovecho para quitarme el sombrero y saludar esta conjunción entre capacidad y generosidad.
    Felicitaciones!

    Comentarios por Luis — abril 24, 2011 @ 6:25 pm

  2. Necesito que me colabores por favor para que me regales la guia del string de conexion para escoger la base de datos a la que necesito migrar, Gracias…

    Comentarios por Hugo Duran — julio 22, 2011 @ 7:08 pm

  3. Como debe ser el connection string que no se ve bien falta algo mas. Podrias explicar mejor.

    Gracias.

    Comentarios por Erwin — octubre 1, 2011 @ 7:54 pm

  4. Si me funciona. Gracias…

    Comentarios por Erwin — octubre 1, 2011 @ 8:11 pm

  5. Muy bueno te felicito pero en mi caso tengo que migrar de postgres a Sqlserver 2008 con datos espaciales por favor no se si me podrias ayudar te lo agradeceria mucho.

    Comentarios por Guirmanisa — octubre 14, 2011 @ 4:21 pm

  6. Tengo Un consulta.. hablando de migrasiones … quisiera migrar un SP(stored procedures) de Mysql a Postgresql.. alguna tecnica… o como se podria solucionar

    Comentarios por Lucio Martin Jorge — noviembre 1, 2011 @ 2:23 pm

  7. Excelente aplicacion Colega!!! Muy buena, ademas ahora que me toco hacer una operacion de este tipo…Gracias por todo!!

    Comentarios por David Romero — May 16, 2012 @ 8:46 pm

  8. Muchas gracias amigo, El Señor bendiga tu generosidad y tu vida….

    Comentarios por Anónimo — julio 17, 2012 @ 3:13 pm

  9. amigo acabo de ejecutar su aplicativo mas me genera el sgte error:

    «Excepcion no controlada en la aplicacion. Si hace clic en Continuar, la aplicacion omitira este error e intentara continuar. Si hace clic en Salir, la aplicacion se cerrara inmediatamente.
    Intento de leer o escribir en la memoria protegida. A menudo, esto indica que hay otra memoria dañada.»

    Palabra clave no admitida ‘provider’

    luego aprieto el boton de detalles y sale esto:
    «Consulte el final de este mensaje para obtener más detalles sobre cómo invocar a la depuración
    Just-In-Time (JIT) en lugar de a este cuadro de diálogo.

    etc, etc, etc…..

    Mi linea de conexion es:

    Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=SA;Data Source=PC

    De antemano indicando q ejecuto el sql2000 dentro de una pc virtual, pues uso aplicaciones de 32 bits y mi laptop es de 64 bits…

    Por favor ayúdeme con este problemita, necesito urgentemente copiar mi db de sql a postgressql…

    Muchas gracias..

    Comentarios por Anónimo — julio 17, 2012 @ 4:48 pm

    • La aplicacion no funciona en SQL Server 2000. Solo es a partir de 2005 en adelante.

      Comentarios por Eduardo — julio 17, 2012 @ 5:51 pm

      • gracias amigo por la aclaración y solución….

        Comentarios por Anónimo — julio 18, 2012 @ 6:35 pm

  10. una ayuda por favor den un ejemplo de conexión gracias

    Comentarios por camilo — agosto 23, 2012 @ 1:09 am

    • toma ve ahi ta tu conexion mmv 8==========D —- ( | )

      Comentarios por Anónimo — octubre 19, 2012 @ 2:07 am

  11. MUchas gracias por tu generosidad amigo. Te agradezco mucho tu noble actitud. Saludos desde El Salvador

    Comentarios por Alberto Mel — febrero 5, 2013 @ 1:36 am

  12. Excelente tu aporte justamente eso necesito hacer. Voy a probarlo y les comento como me fue.

    Comentarios por Anónimo — septiembre 10, 2013 @ 3:07 pm

  13. osea nooooo…..esta super genial, exelente aporte congratulation men :)

    Comentarios por Anónimo — octubre 29, 2013 @ 3:00 pm

    • sorry ……..osea nooooo…..esta super genial, excelente aporte congratulation men :)

      Comentarios por Anónimo — octubre 29, 2013 @ 3:02 pm

  14. amigo podrias subir no el ejecutable si no la aplicacion en el lenguaje para estudiar el codigo

    Comentarios por damvid — marzo 15, 2014 @ 10:54 pm

  15. funciona con este tipo de cadena de conexión, pej
    Server=192.168.xx.yy\SERVIDOR;Database=DATABASE;Uid=sa;Pwd=;Persist Security Info=true;

    Comentarios por Anónimo — julio 22, 2014 @ 3:52 pm

  16. bueno, no es perfecto, claro, pero funciona :) el fallo más tonto es que añade a todos los índices y claves primarias «_nombre_de_la_tabla», lo que es un poco absurdo.. pero bueno… hace su trabajo, como digo, y facilita horrores la migración. gracias. estaría bien que colgaras el código fuente para poder corregir este «error» y el tema de las comillas dobles, que, en mi caso, tampoco es necesario… saludos y gracias de nuevo por el programa

    Comentarios por Anónimo — julio 22, 2014 @ 4:00 pm

  17. hola puede facilitar el codigo fuente???

    Comentarios por Maritza Ponce — junio 1, 2015 @ 12:33 am

  18. Utilizado en SQLServer 2016 a Postgresql 9.6.3 funcionó y me facilitó la vida. Muchas gracias!

    Comentarios por Anónimo — junio 23, 2017 @ 9:39 pm

    • De Casualidad no te causo problemas al ejecutar consultas después de que creaste la base de datos, porque a mi me creo la estructura en mayúsculas y con comillas dobles y siempre tengo que poner tal cual la tabla y comillas, en cambio si lo convierto a minúsculas no es necesario poner las comillas y no importa si pongo la tabla en mayúsculas o minúsculas.

      Comentarios por anonimo — octubre 9, 2017 @ 2:04 pm


RSS feed for comments on this post. TrackBack URI

Replica a camilo Cancelar la respuesta

Blog de WordPress.com.