Pessoal,
Preciso de uma ajuda com CURSOR usando plpgsql.
Tenho uma funcao que em um determinado momento abre um cursor do seguinte
modo:
DECLARE
...
...
-- Cursor que representa os dados da query
c_periodo refcursor;
BEGIN
OPEN c_periodo FOR SELECT d.dadtdt_pacote,
d.dadtmotooid,d.dadtveioid,v.veiplaca
FROM dados_telemetria d
LEFT JOIN veiculo v ON d.dadtveioid = v.veioid AND
(v.veifilioid = _filial OR _filial = 0)
WHERE d.dadtdt_pacote >= (_data_inicio - interval
'1 day')
AND d.dadtdt_pacote <= (_data_fim + interval '1
day')
AND (d.dadtveioid = _veiculo OR _veiculo = 0)
AND ((d.dadtmotooid = _motorista OR d.dadtmotooid =
0) OR _motorista IS NULL)
AND d.dadtveioid IN
(SELECT DISTINCT delveioid FROM delta WHERE
deldatapacote >= (_data_inicio - interval
'1 day')
AND deldatapacote <= (_data_fim + interval
'1 day')
AND delmotooid = _motorista
)
ORDER BY d.dadtdt_pacote;
-- Obtendo a primeira linha da query
FETCH c_periodo INTO dt_pacote,id_motorista,id_veiculo,placa;
-- Iteracaoo geral
WHILE FOUND LOOP
...
WHILE v_logado = id_motorista LOOP
...
-- Verificando se ha um motorista logado
IF id_motorista <> 0 THEN
-- Retorna o oid do motorista
v_retorno.motooid := id_motorista;
ELSE
-- Retorna -1 indicando que nao havia nenhum motorista
logado
v_retorno.motooid := -1;
END IF;
RAISE NOTICE 'next 1 -->';
-- Obtendo o proximo item do cursor
FETCH NEXT FROM c_periodo INTO
dt_pacote,id_motorista,id_veiculo,placa; --- acho que o cursor foi usado
por causa dessa parte
-- Fim da iteracao nos eventos
END LOOP;
...
END LOOP;
....
O problema esta na hora do "FETCH. Se eu coloco o periodo de 2 dias (500
regs) na query a parada funciona em 10 segs.
Se colocar o periodo de 1 semana (aproximadamente 1600 regs) demora uma
eternidad, tipo, fiquei esperando mais de 5 min. e nada de retorno.
Alguem poderia me dizer se esta sendo feito de errado baseado no que passei
acima?
Seria alguma coisa em configuracao do postgresql com o server linux que
esta estorando a memoria ou coisa do tipo que ta enroscando?
Isso foi feito por um programador que nao trabalha mais aqui, entao, na
verdade e nem sei se um cursor seria o mais indicado.
Obrigado.
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral