Poseemos la mejor respuesta que hemos encontrado en todo internet. Nuestro deseo es que te sea útil y si quieres comentarnos alguna mejora puedes hacerlo..
Solución:
Si tiene los controladores de soporte de Postgres apropiados instalados en su caja de SQL 2005 (o desea usar Postgres a través de ODBC, o desea volcar los datos de Postgres a un archivo e importar desde allí), 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 trabajo de paquete de SQL Server Integration Services (SSIS), usando 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 tiene 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.
Terminé sin usar ninguna herramienta de terceros para los datos, ya que ninguna de las que probé funcionó para las tablas grandes. Incluso SSIS falló. Sin embargo, utilicé una herramienta comercial para el esquema. Así que mi proceso de conversión fue el siguiente:
- Empresa de conversión completa para copiar el esquema (sin datos).
- pg_dump para exportar los datos de Postgres en formato de “texto sin formato”, que es básicamente un archivo de valores separados por tabuladores (TSV).
- Secuencias de comandos de Python para transformar los archivos exportados en un formato que bcp entendería.
- bcp para importar los datos a MSSQL.
El paso de transformación solucionó 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 datos entre los separadores de columna)
- pg_dump codifica las pestañas como “t” y las líneas nuevas como “n”, mientras que bcp las trata literalmente
- pg_dump siempre usa tabulaciones y saltos de línea como separadores, mientras que bcp permite al usuario especificar separadores. Esto se vuelve necesario si los datos contienen tabulaciones o saltos de línea, ya que no están codificados.
También descubrí que algunas restricciones únicas que estaban bien en Postgres se violaron en MSSQL, por lo que tuve que descartarlas. Esto se debió a que NULL=NULL en MSSQL (es decir, NULL se trata como un valor único), pero no en Postgres.
Si para ti ha sido de provecho nuestro post, sería de mucha ayuda si lo compartieras con el resto seniors de esta manera contrubuyes a dar difusión a este contenido.