Existe um método rápido para exportar uma tabela grande do mysql para o postgresql?

1

Eu tenho uma tabela com cerca de 2,7 milhões de registros, 63 campos e vários índices. Eu preciso ser capaz de obter esta tabela do mysql para postgresql rapidamente (digamos dentro de uma hora). Eu sei que o mysql pode exportar os dados rapidamente, mas o postgresql parece estar muito lento ao importar os dados. Alguma ideia? Eu tenho importado um CSV produzido a partir do mysqldump por cerca de 3 horas agora.

    
por shady 30.03.2011 / 23:21

3 respostas

6

A maneira mais rápida que posso imaginar seria descartar todos os índices e acionadores (ou pelo menos ALTER TABLE foo DISABLE TRIGGER ALL; ) na tabela no postgresql, adicionar a linha \. da extremidade da entrada ao final do seu CSV arquivo, em seguida, colocar o arquivo no servidor (de preferência em uma unidade diferente do que está sendo usado para o banco de dados, ou talvez em algum lugar na rede, o servidor pode acessar via NFS) e COPY foo FROM '/some/file.csv' WITH CSV; (8.x sintaxe, que é suportado em 9.0 Dependendo do formato de arquivo CSV, você pode precisar fazer modificações . , recrie os índices e reative os gatilhos.

Algumas das opções de configuração para postgres podem afetar os tempos de carregamento de dados. Desativar o autovacuum e aumentar o tempo entre os checkpoints pode ajudar com cargas enormes, mas será necessário reiniciar o postgresql para alterar as configurações de checkpoint_segments ou autovacuum e você deverá configurar o autovacuum de volta quando estiver feito.

    
por 31.03.2011 / 01:05
3

mysqldump --compatible=postgresql -h... -u... -p... dbname tablename > PostgresqlData.sql

Esta opção existe

--compatible=name   Change the dump to be compatible with a given mode. By                      default tables are dumped in a format optimized for
                  MySQL. Legal modes are: ansi, mysql323, mysql40,
                  postgresql, oracle, mssql, db2, maxdb, no_key_options,
                  no_table_options, no_field_options. One can use several
                  modes separated by commas. Note: Requires MySQL server
                  version 4.1.0 or higher. This option is ignored with
                  earlier server versions.

Experimente!

    
por 31.03.2011 / 02:50
2

Existem inúmeras ferramentas profissionais ETL que podem migrar entre bancos de dados em velocidades bastante altas - para Por exemplo, eu usei PDI (nee Kettle) de código-fonte aberto do Pentaho no intervalo de 100 mil linhas / segundo. Eles também trazem várias outras vantagens, como permitir que você faça a massagem de dados em algumas novas estruturas, uma interface gráfica para o processo de mapeamento e assim por diante.

    
por 02.01.2012 / 06:59