Mozart;

Não entendi exatamente o que seu procedimento faz, porém tenho um problema
semelhante. Faço diariamente cargas de arquivos de texto em 160 tabelas e
que somam mais de 1.900.000 linhas.

Se o seu problema é carregar dados, então posso compartilhar com você minha
experiência.

Após pesquisas na internet e testes com esta quantidade grande de
informações lhe afirmo que as ferramentas visuais são mais lentas que os
comandos rodados diretamente do console do seu banco.

Para você ter idéia, a carga nestas 160 tabelas que somam mais de 1.900.000
linhas demorou apenas 1:54 ( um minuto e cinquenta e quatro *segundos* ).

Eu uso o comando COPY alimentado por um arquivo com os dados somente; sem os
INSERT.

Para ter esta eficiência eu dropo a tabela, recrio-a, e faço o copy com o
arquivo somente com os dados, após isto eu crio os índices; todo este
procedimento está dentro do meu script.

São tabelas de um mainframe IBM que eu transporto para o PostgreSQL
diariamente; não tenho problemas ao dropar as tabelas, pois eu uso-as como
cópias de segurança e não há nenhum sistema utilizando-as diretamente.

Como cada caso é um caso, se seu problema é semelhante ao meu sugiro que
você analise esta forma de carga de seus dados ( COPY tabelaSQL FROM
'/home/minha_tabela.txt; ) ; para mim está funcionando perfeitamente.

Ernesto Jorge Costa Martins
Universidade Federal do Rio Grande - FURG
Centro de Processamento de Dados

2008/12/11 Mozart Hasse <[email protected]>

> Preâmbulo da pergunta:
>
> Tenho o problema frequente de rodar scripts monstruosamente grandes (um
> milhão de comandos SQL separados por ponto-e-vírgula) com frequência. O
> problema é que pode ocorrer um erro láááááá no meio dele e aí eu
> preciso retomar daquele ponto e só então continuar com os comandos
> subsequentes. Meus requisitos:
>
> 1. A estação roda Windows, conecta-se ao servidor que é necessariamente
> outra máquina e tem pouca memória. Não, eu não estou interessado em
> soluções que precisem de alguns gigas de RAM nem usem outro sistema
> operacional.
>
> 2. Recortar e colar um texto desse tamanho em um programa qualquer detona
> minha estação, assim como simplesmente mostrar este texto na tela. Quero um
> programa que leia sequencialmente cada comando do script a partir de um
> arquivo e descarte-o da memória assim que executar com sucesso.
>
> 3. Carregar um arquivo desse tamanho é demorado porque consome toda a
> memória da estação (a área de transferência do Windows consome toda a
> memória virtual com um texto desse tamanho). Quero um programa inteligente
> o
> bastante para colocar na memória apenas o necessário durante a execução.
>
> 4. QUANDO acontece um erro, eu quero retomar do ponto onde o erro ocorreu,
> e
> não recomeçar tudo porque estava no meio da mesma transação. Ou seja,
> quero ter a opção de rodar cada comandinho do script dentro de uma
> transação.
>
> 5. QUANDO acontecer um erro, eu também quero que ele PARE, dê COMMIT no que
> funcionou até esse ponto e nem tente rodar os comandos subsequentes.
>
> 6. Caso não seja possível abortar em caso de erro, eu queria poder olhar o
> resultado do script enquanto o programa manda os comandos para o banco, e
> abortar caso encontre algum aviso comprometedor. O problema é que, como o
> script é grande, o resultado do script também é grande e por si só já
> detona a memória da máquina. Eu não quero esperar ele rodar o script
> inteirinho para só depois abrir o arquivo de LOG e descobrir que ele não
> fez
> nada porque deu erro de sintaxe no segundo comando.
>
> Isso não tem necessariamente a ver com Postgres, apesar de ser muito bom
> saber se há alguma ferramenta que faça isso conectando com ele.
>
> Pois é, então finalmente a pergunta é:
>
>
> Alguém conhece algum programa que faça isso ou algo parecido??
>
>
> Atenciosamente,
>
>
> Mozart Hasse
>
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a