Fabio Henrique,

> Eu tambem rodo script enormes, nao grandes iguais ao seus, com 1 milhao 
> de linhas, mas em torno de 100 mil linhas com varios inserts em cada 
> linha. (...) Para rodar esses 
> scripts eu utilizo o PGadmin que, com certeza, nao foi feito para rodar 
> scripts deste tamanho. 

Concordo plenamente!

> Se eu nao me engano, ele faz justamente isso q vc 
> qr, ele vai inserindo as linhas e dando commit ate onde der erro, nao 
> precisando vc ter q rodar o script novamente. Uma outra alternativa 
> seria para cada linha vc inserir um 'BEGIN;' no inicio e um 'COMMIT;' no 
> final.

Pelo que usei, não faz não. Quando tem um monte de comandos separados por
';', ele considera tudo parte da mesma transação, o que é um desastre nesse
caso. Isso me obriga a rodar um pedaço de cada vez, porque:

1. Se *der* erro de integridade referencial, eu perdi o tempo que ele ficou
rodando antes do erro (e o rollback que eu não pedi para ele fazer). Depois,
tenho de achar o bendito comando dentro do script (nem sempre é fácil quando
o script é enorme), rodar tudo até antes do comando que deu erro, apagar o
trecho já executado, corrigir o comando e executar dali em diante.

2. Se *não der* erro de integridade referencial, preciso rodar um trechinho
de cada vez para não estourar o limite de LOCKs do servidor (o chato é que
ele leva um tempão para descobrir que o limite foi atingido). Não, eu não
quero aumentar esse valor porque o valor padrão é perfeitamente aceitável
para uso normal, e não quero ficar parando, reconfigurando e reiniciando
serviço toda a vez que quiser rodar um inocente script numa estação.

Valeu,

Mozart Hasse


_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a