A função demora mesmo, o problema não é o tempo que ela demora pra ser executada, o problema é que a aplicação fica aguardando o termino dela, se ela é chamada por uma trigger pq a aplicação fica travada até terminar?


Felipe Pamboukian
Analista Programador
Informídia Pesquisas Esportivas Ltda.
Tel./Fax.: 55 11 3673 5566
Email: [email protected]
Web: www.informidia.com.br
Antes de imprimir lembre-se de sua responsabilidade e comprometimento com o Meio Ambiente

Em 16/12/2010 16:02, Fabrízio de Royes Mello escreveu:


Em 16 de dezembro de 2010 15:17, [email protected] <[email protected]> escreveu:
CREATE OR REPLACE FUNCTION "public"."f_rep_tarefa_concluida" (
)
RETURNS trigger AS
$body$
DECLARE
    rec           RECORD;
    dataini      TIMESTAMP(0);
    datafim     TIMESTAMP(0);
    flag           BOOLEAN;
BEGIN
    IF OLD.estado = '0' and NEW.estado = '1' THEN
        perform zera_calc_rep(NEW.idrepesportesmt);

        FOR rec IN select idrel_tarefasrep, idprog from rel_tarefasrep where idrepesportesmt = NEW.idrepesportesmt LOOP
            dataini = now();      
            flag = f_rodar_reportagem(NEW.idrepesportesmt, rec.idprog);           
            datafim = now();                
        
            IF flag = true THEN                                       
              update rel_tarefasrep set
                     rodado = true
              where idrel_tarefasrep = rec.idrel_tarefasrep;      
                    
--               insert into hist_relatorio_reportagem values (0, rec.idrel_tarefasrep, dataini, datafim, '', '0');                                                            
            END IF;
        END LOOP;
    END IF;
       
    RETURN NULL;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;



Me parece que vc necessita otimizar essas suas funções ou utilizar outra abordagem. Algumas informações:

*  Quantos registros retorna essa sua query;
  " FOR rec IN select idrel_tarefasrep, idprog from rel_tarefasrep where idrepesportesmt = NEW.idrepesportesmt LOOP "

* Quanto tempo leva para processar a PL:
  "             flag = f_rodar_reportagem(NEW.idrepesportesmt, rec.idprog);            "


Vc rodou um EXPLAIN para observar os planos das queries envolvidas nessa sua PL??? Seria interessante fazer isso para poder detectar o(s) gargalo(s).

-- 
Fabrízio de Royes Mello
>> Blog sobre TI: http://fabriziomello.blogspot.com
_______________________________________________ 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