On Wed, Feb 19, 2014 at 2:15 PM, Danilo Silva <[email protected]>wrote:
> Pessoal,
>
> tenho uma função que executa uma consulta e retorna o resultado.
> Executando somente a consulta leva em torno de 120ms, mas executando a
> função leva em torno de 12000ms, o que pode ser?
>
> A função:
>
> CREATE OR REPLACE FUNCTION registro_ol_selecionar(integer, integer,
> integer, integer, character varying, integer, character varying, integer,
> text, text, text, text, text, date, time without time zone, integer, text)
> RETURNS SETOF type_registro_ol AS
> $BODY$
> DECLARE query record;
> BEGIN
> FOR query in
> SELECT
> a.regol_codigo,
> ...
> ORDER BY a.regol_codmov,a.regol_dtcad
> LIMIT 450
> LOOP
> RETURN NEXT query;
> END LOOP;
>
O FOR ... LOOP numa função PL/pgSQL é um pouco custoso, então eu creio que
seja essa a causa. Na verdade você não precisa de um FOR ... LOOP, ao invés
dele use uma função em linguagem SQL (não plpgsql), ou ao menos use o
RETURN QUERY:
RETURN QUERY SELECT ...
> END
> $BODY$
> LANGUAGE plpgsql IMMUTABLE;
>
>
Essa função não é IMMUTABLE, defina a mesma como STABLE, ou então você pode
ter resultados inesperados.
Atenciosamente,
--
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral