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 e cerca de 400.000.000 de 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 e no de origem e precisam ser capazes de copiar esse volume de dados dentro de um prazo razoável.


4
só por curiosidade: por que diabos você quer fazer isso?
wzzrd 15/09/09

Presumo que você esteja migrando para um servidor Windows por algum outro motivo que não seja a funcionalidade db? Espero :) #
22009 warren

Respostas:


6

Acabei não usando nenhuma ferramenta de terceiros para os dados, pois nenhuma das que tentei funcionou para as tabelas grandes. Até o SSIS falhou. Eu usei uma ferramenta comercial para o esquema, no entanto. Portanto, 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 sem formatação", que é basicamente um arquivo de valores separados por tabulação (TSV).
  3. Os scripts 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 resolveu algumas diferenças nos formatos usados ​​por pg_dump e bcp, como:

  • O pg_dump coloca alguns itens específicos do Postgres no início do arquivo e finaliza os dados com ".", enquanto o bcp espera que o arquivo inteiro contenha dados
  • O 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 coluna)
  • O pg_dump codifica guias como "\ t" e novas linhas como "\ n", enquanto o bcp as trata literalmente
  • O pg_dump sempre usa tabulações 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, pois não são codificados.

Também descobri que algumas restrições únicas que eram boas no Postgres foram violadas no MSSQL, então tive que removê-las. Isso ocorreu porque NULL = NULL no MSSQL (ou seja, NULL é tratado como um valor exclusivo), mas não no Postgres.


Essa é uma peculiaridade do SQL Server. Em vez de uma restrição exclusiva, você precisa definir um INDEX exclusivo filtrado (WHERE column_name NÃO É NULL).
Quandary

Você me levou uma ferramenta que convenci meu chefe a comprar. É incrível #FullConvert #
mugume david

6

Se você possui os drivers de suporte adequados do Postgres instalados na sua caixa do SQL 2005 (ou deseja usar o Postgres via ODBC, ou deseja despejar os dados do Postgres em um arquivo e importá-lo), use o assistente de importação / exportação no SQL Server em para copiar os dados. Isso fará uma variedade de perguntas e, em seguida, executa a importação como um trabalho de pacote do SQL Server Integration Services (SSIS), 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 recebe espaço suficiente no log de transações para permitir uma transação de 50 GB ' instruções simples de inserção não estão fora de questão.


11
Observe o uso do BCP (é um utilitário que acompanha o SQL Server), se você acabar exportando os dados e depois importando para o SQL Server. Usar o SSIS é uma boa ideia, se você deseja obtê-lo diretamente do servidor PG, mas pode causar problemas no registro.
ColtonCat 15/09/09

O pacote SSIS parecia muito promissor e eu tentei, mas infelizmente fica sem memória e falha. :( ERRO [HY000] Falta de memória ao ler as tuplas .; Erro ao executar a consulta (PSQLODBC35W.DLL)
EMP


0

Quase 10 anos depois, e isso ainda não é uma questão direta. Acabei com uma solução híbrida, rolei meu próprio mapeador de esquema exportando os comentários de esquema e tabela / coluna usando o seguinte comando:

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

Em seguida, escrevi um script PHP que traduzia o esquema para T-SQL. Posteriormente, usei o seguinte software de terceiros para fazer a importação real de linhas (sem afiliação):

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

Foi um pouco lento, mas até agora tudo bem. Nosso banco de dados era menor que o seu, apenas 15 GB, mas essa ferramenta parecia lidar bem com isso. Também foi o mais barato que pude encontrar por cerca de US $ 50. Até agora, valeu a pena investir.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.