Galera o processamento de 45 minutos que eu comentei não é o problema, a função realmente demora muito e vai demorar pois ela executa diversos calculos matematicos...
o meu problema é que o usuário que está trabalhando não pode esperar esse tempo, isso tem q ser automático. Existe alguma maneira de executar em segundo plano usando PL/pgSQL?


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:25, Osvaldo Kussama escreveu:
Em 16/12/10, [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;

    

Apenas uma observação:
Você efetivamente deseja que o conteúdo de dataini e datafim seja o
momento do início da transação?

Fica difícil comentar alguma coisa sem saber se "zera_calc_rep" e
"f_rodar_reportagem" envolvem um processamento demorado ou não, se
"select idrel_tarefasrep, idprog from rel_tarefasrep where
idrepesportesmt = NEW.idrepesportesmt" retorna um volume astronômico
de registros ou não.

É uma trigger AFTER?

O auto-vacuum está devidamente configurado?

Osvaldo
_______________________________________________
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