Melhor ferramenta para migrar um banco de dados PostgreSQL para o MS SQL 2005?

8

Eu tenho um banco de dados no PostgreSQL 8.3.1 que gostaria de migrar para o MS SQL Server 2005 (ou talvez 2008), incluindo o esquema da tabela e os dados. O banco de dados tem cerca de 50 GB de tamanho, com cerca de 400.000.000 linhas, então acho que instruções INSERT simples estão fora de questão. Alguém poderia recomendar a melhor ferramenta para realizar essa migração? Obviamente, ele precisa ser confiável, portanto, os dados são exatamente os mesmos no banco de dados de destino, assim como no de origem, e precisam ser capazes de copiar esse volume de dados dentro de um tempo razoável.

    
por EMP 15.09.2009 / 06:28

3 respostas

5

Acabei não usando nenhuma ferramenta de terceiros para os dados, pois nenhum dos que eu tentei funcionou nas grandes tabelas. Mesmo SSIS falhou. Eu usei uma ferramenta comercial para o esquema, no entanto. Então, meu processo de conversão foi o seguinte:

  1. Full Convert Enterprise para copiar o esquema (sem dados).
  2. pg_dump para exportar os dados do Postgres no formato "texto simples", que é basicamente um arquivo de valores separados por tabulação (TSV).
  3. Os scripts em Python para transformar os arquivos exportados em um formato que o bcp entenderia.
  4. bcp para importar os dados para o MSSQL.

A etapa de transformação cuidou de algumas diferenças nos formatos usados pelo pg_dump e bcp, como:

  • O pg_dump coloca algumas coisas específicas do Postgres no início do arquivo e finaliza os dados com ".", enquanto o bcp espera que o arquivo inteiro contenha dados
  • pg_dump armazena valores NULL como "\ N", enquanto o bcp não espera nada no lugar de um NULL (ou seja, nenhum dado entre os separadores de colunas)
  • pg_dump codifica as guias como "\ t" e novas linhas como "\ n", enquanto o bcp as trata literalmente
  • pg_dump sempre usa abas e novas linhas como separadores, enquanto o bcp permite ao usuário especificar separadores. Isso se torna necessário se os dados contiverem guias ou novas linhas, uma vez que não estão codificados.

Eu também descobri que algumas restrições únicas que estavam bem no Postgres foram violadas no MSSQL, então eu tive que descartá-las. Isso ocorreu porque NULL = NULL no MSSQL (ou seja, NULL é tratado como um valor único), mas não no Postgres.

    
por 28.09.2009 / 03:42
6

Se você tiver os drivers de suporte do Postgres apropriados instalados na sua caixa do SQL 2005 (ou desejar usar o Postgres via ODBC, ou quiser despejar os dados do Postgres em um arquivo e importá-los), use o assistente de importação / exportação SQL Server para copiar os dados. Isso fará uma variedade de perguntas e, em seguida, executará a importação como um trabalho de pacote do SSIS (SQL Server Integration Services), usando operações de inserção em lote apropriadas.

No entanto, se esse assistente não for uma opção, vale a pena considerar que, embora você tenha um grande número de linhas, o tamanho individual das linhas é < 135 bytes, em média, e dado espaço de log de transação suficiente para permitir que uma transação de 50 GB ocorra instruções 'simples insert' não estão fora de questão.

    
por 15.09.2009 / 06:54
0

link

Lá vai você :) Infelizmente, é um pouco caro.

    
por 15.09.2009 / 06:50