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.

21 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!

    Comentario 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…

    Comentario 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.

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

  4. Si me funciona. Gracias…

    Comentario 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.

    Comentario 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

    Comentario 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!!

    Comentario por David Romero — mayo 16, 2012 @ 8:46 pm

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

    Comentario 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..

    Comentario 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.

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

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

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

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

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

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

      Comentario 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

    Comentario 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.

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

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

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

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

      Comentario 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

    Comentario 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;

    Comentario 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

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

  17. hola puede facilitar el codigo fuente???

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


RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Blog de WordPress.com.

A %d blogueros les gusta esto: