¿La mejor herramienta para migrar una base de datos PostgreSQL a MS SQL 2005?

8

Tengo una base de datos en PostgreSQL 8.3.1 que me gustaría migrar a MS SQL Server 2005 (o tal vez 2008), que incluye tanto el esquema de la tabla como los datos. La base de datos tiene un tamaño de aproximadamente 50 GB con aproximadamente 400,000,000 filas, por lo que creo que las declaraciones INSERT simples están fuera de discusión. ¿Alguien podría recomendar la mejor herramienta para realizar esta migración? Obviamente, debe ser confiable, por lo que los datos son exactamente los mismos en la base de datos de destino que en la fuente y debe poder copiar este volumen de datos en un tiempo razonable.

EMP
fuente
44
solo por curiosidad: ¿por qué demonios quieres hacer esto?
wzzrd
¿Supongo que te estás mudando a un servidor de Windows por alguna otra razón que no sea simplemente la funcionalidad db? Espero :)
Warren

Respuestas:

6

Terminé sin usar ninguna herramienta de terceros para los datos, ya que ninguno de los que probé funcionó para las tablas grandes. Incluso SSIS falló. Sin embargo, sí utilicé una herramienta comercial para el esquema. Entonces mi proceso de conversión fue el siguiente:

  1. Full Convert Enterprise para copiar el esquema (sin datos).
  2. pg_dump para exportar los datos de Postgres en formato de "texto plano", que es básicamente un archivo de valores separados por tabulaciones (TSV).
  3. Las secuencias de comandos de Python para transformar los archivos exportados en un formato bcp lo entenderían.
  4. bcp para importar los datos a MSSQL.

El paso de transformación se ocupó de algunas diferencias en los formatos utilizados por pg_dump y bcp, como:

  • pg_dump coloca algunas cosas específicas de Postgres al comienzo del archivo y finaliza los datos con ".", mientras que bcp espera que todo el archivo contenga datos
  • pg_dump almacena valores NULL como "\ N", mientras que bcp no espera nada en lugar de NULL (es decir, no hay separadores de columnas intermedios de datos)
  • pg_dump codifica las pestañas como "\ t" y las nuevas líneas como "\ n", mientras que bcp las trata literalmente
  • pg_dump siempre usa pestañas y líneas nuevas como separadores, mientras que bcp permite al usuario especificar separadores. Esto se hace necesario si los datos contienen pestañas o nuevas líneas, ya que no están codificadas.

También descubrí que algunas restricciones únicas que estaban bien en Postgres se violaron en MSSQL, por lo que tuve que eliminarlas. Esto se debió a que NULL = NULL en MSSQL (es decir, NULL se trata como un valor único), pero no en Postgres.

EMP
fuente
Esa es una peculiaridad del servidor SQL. En lugar de una restricción única, debe establecer un ÍNDICE único filtrado (DONDE column_name NO ES NULO).
Dilema
Me guiaste una herramienta que convencí a mi jefe para comprar. Es impresionante #FullConvert
mugume david
6

Si tiene instalados los controladores de soporte Postgres apropiados en su caja SQL 2005 (o desea usar Postgres a través de ODBC, o desea volcar los datos de Postgres a un archivo e importar desde ese), puede usar el asistente de importación / exportación en SQL Server en Para copiar los datos. Esto le hará una variedad de preguntas y luego ejecutará la importación como un paquete de trabajo de SQL Server Integration Services (SSIS), utilizando las operaciones de inserción por lotes apropiadas.

Sin embargo, si ese asistente no es una opción, vale la pena considerar que, aunque tiene una gran cantidad de filas, el tamaño individual de las filas es <135 bytes en promedio y se le da suficiente espacio de registro de transacciones para permitir que ocurra una transacción de 50 GB ' las declaraciones de inserción simple no están fuera de discusión.

Steve Gray
fuente
1
Mire el uso de BCP (es una utilidad que viene con el servidor SQL), si termina exportando los datos y luego los importa a SQL Server. Sin embargo, usar el SSIS es una buena idea si solo desea obtenerlo directamente del servidor PG, pero puede darle problemas de registro.
ColtonCat
El paquete SSIS sonaba muy prometedor y lo probé, pero desafortunadamente se queda sin memoria y falla. :( ERROR [HY000] Sin memoria al leer tuplas .; Error al ejecutar la consulta (PSQLODBC35W.DLL)
EMP
0

http://www.easyfrom.net/

Ahí tienes :) Desafortunadamente, es un poco caro.

David Rickman
fuente
Gracias, lo intenté, pero encontré algunos errores con las tablas grandes.
EMP
0

Casi 10 años después, y esto todavía no es un problema directo. Terminé con una solución híbrida, hice rodar mi propio mapeador de esquemas exportando el esquema y los comentarios de tabla / columna usando el siguiente comando:

pg_dump --schema-only --no-owner --no-privileges your_db_name > schema_create_script.sql

Luego escribí un script PHP que tradujo el esquema a T-SQL. Posteriormente, utilicé el siguiente software de terceros para realizar la importación real de filas (sin afiliación):

http://www.convert-in.com/pgs2mss.htm

Fue un poco lento, pero hasta ahora muy bueno. Nuestra base de datos era más pequeña que la suya, solo 15GB, pero esa herramienta parecía manejarla bien. También fue el más barato que pude encontrar en alrededor de $ 50. Hasta ahora ha valido la pena la inversión.

dearsina
fuente