Fernando, > Segue a Relação Solicitada. > - Sistema Operacional = Windows 2003 Server > - Versão PostgreSQL = 8.2 > - Configurações PostgreSQL (postgresql.conf) - Segue anexo > - Estruturas de Dados utilizadas (tabelas, indices, etc) Segue anexo > - Procedimentos envolvidos (pls, rotinas, etc). Segue anexo > Obrigado. > Fernando Gesse.
Meus palpites: - Há um loop dentro do outro trabalhando registro a registro. O ideal seria agrupar os UPDATEs para ter menos comandos executados. Procure ordenar ou dar um GROUP BY no cursor de produtos. Em 400 registros como você estimou, aposto que há produtos e operações repetidas que poderiam ser montados num UPDATE só; - Há montagem de SQL dinâmica. Os IFs que montam isso não são tão complicados, sugiro que troque tudo por comandos SQL fixos. O código talvez aumente (pelo que vi não muito), mas o Postgres não perderá tempo montado strings e recompilando centenas de vezes comandos bem parecidos. É pouco provável que resolva, mas com certeza ajuda; - Para cada tabela que sobre insert, tente montar um SELECT com todos os registros a inserir (sim, unindo todos os casos, tipos de operação e regras de negócio) e faça a inserção fora dos loops usando um INSERT INTO SELECT. Isso poupará um tempo considerável e tornará seu código muito mais simples; - Pondere bem se você precisa REALMENTE de dois loops um dentro do outro. Se possível coloque um UPDATE por tabela, somando ou subtraindo tudo o que é necessário de uma só vez; - com menos comandos e uma lógica mais orientada a conjuntos, pode ser possível identificar quais comandos geram teu gargalo e aí otimizar mais este processo. Atenciosamente, Mozart Hasse _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
