Utilize copy ao invés de inserts, ele foi feito para isso!
On Thu, 2008-12-11 at 15:36 -0200, Sebastian SWC wrote: > 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. > > > > Não conheço, mas escrever um programa que roda um "alter table" de > cada vez não parece ser muito complicado.... > _______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral