problema con parametros timestamp en plpgsql

From: gorka <glana(at)cestel(dot)es>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: problema con parametros timestamp en plpgsql
Date: 2009-06-17 10:58:47
Message-ID: 4A38CC67.10904@cestel.es
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola listeros

Tengo un pequeño problema con una funcion plpgsql. La funcion tiene 3
parametros de entrada, un integer y dos timestamp. El caso es que dentro
de la query con la que devuelvo un refcursor hago un filtro entre los
dos parametros timestamps. Ahora me he dado cuenta de que tarda bastante
la consulta y he metido un indice por el campo tiemstamp por el que
filtro. Hasta ahi todo bien. Cojo la query de la funcion, la ejecuto
cambiando los parametros por valores timestamp y tarda, pero un tiempo
razonable. Hago lo mismo dentro del procedimiento, poniendo valores
timestamp fijos y tarda aproximadamente lo mismo. Pero en cuanto pongo
en la funcion los parametros de tipo timestamp, el tiempo se dispara.
Alguien sabe que problema puedo tener??

Las dos versiones de la funcion (en realidad es mucho mas compleja la
query, pero esta sirve de ilustracion) son:

Sin usar parametros...

CREATE OR REPLACE FUNCTION obtener_envios2(p_fecha_ini timestamp,
p_fecha_fin timestamp)
RETURNS refcursor AS
$BODY$declare
--
l_rc_generic refcursor;
--
BEGIN
OPEN l_rc_generic FOR
SELECT * FROM ENVIOS where fecha_alta between
'2009-05-18'::timestamp AND '2009-06-18'::timestamp;
--
RETURN l_rc_generic;
--
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

usando parametros

CREATE OR REPLACE FUNCTION obtener_envios2(p_fecha_ini timestamp,
p_fecha_fin timestamp)
RETURNS refcursor AS
$BODY$declare
--
l_rc_generic refcursor;
--
BEGIN
OPEN l_rc_generic FOR
SELECT * FROM ENVIOS where fecha_alta between p_fecha_ini AND
p_fecha_fin;
--
RETURN l_rc_generic;
--
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

siempre llamo a la funcion de la forma...

begin;
select obtener_envios2('2009-02-18'::timestamp,'2009-06-18'::timestamp);
fetch all in "<unnamed portal xxxx>";

y en el primer caso me tarda (incluyendo el mostrar resultados) unos 850
milisegundos y en el segundo tarda unos 1600 milisegundos, y en los dos
casos obtenemos los mismos datos.

Os agradeceria la ayuda.

Saludos

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gabriel Ferro 2009-06-17 11:15:19 Re: Re: [pgsql-es-ayuda] acentos y ñ
Previous Message Carolina Roman Salgado 2009-06-17 09:23:58 Re: Re: acentos y ñ