Re: problema con parametros timestamp en plpgsql

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: gorka <glana(at)cestel(dot)es>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: problema con parametros timestamp en plpgsql
Date: 2009-06-17 16:24:12
Message-ID: 20090617162412.GF6750@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

gorka escribió:
> Hola:
>
> El problema es que esta función es llamada desde Java, siendo recogida
> en un resultset dentro del metodo java, y no se como se puede recoger
> desde java un setof xxxx. Además a estas alturas, con el producto ya en
> producción, no se yo si la gente de Java va a estar dispuesta a cambiar
> la forma de obtener los datos.

Ugh.

Bueno, quizás funcione de todas formas. La idea es que en lugar de
hacer

OPEN foo CURSOR FOR ... WHERE fecha < param1 AND fecha > param2

hagas esto:

EXECUTE 'OPEN foo CURSOR FOR ... WHERE fecha < ' || param1 || ' AND fecha > ' || param2'

La diferencia es que en el segundo caso, los valores son interpolados al
momento de crear el plan, en cambio en el primer caso se hace el plan y
después se entregan los valores de los parámetros.

De hecho puedes conseguir imitar esto directamente en SQL para que veas
que se estropea el plan, de la siguiente forma:

PREPARE foo(timestamp, timestamp) AS SELECT bla, bla ... WHERE fecha < $1 AND fecha > $2
EXPLAIN ANALYZE EXECUTE foo(fecha1, fecha);

Y compara el plan que obtienes ejecutando la consulta directamente con
los valores:

EXPLAIN ANALYZE SELECT bla, bla ... WHERE fecha < 'fecha1' AND fecha > 'fecha2'

--
Alvaro Herrera http://planet.postgresql.org/
"MySQL is a toy compared to PostgreSQL." (Randal L. Schwartz)
(http://archives.postgresql.org/pgsql-general/2005-07/msg00517.php)

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Dilm E.I.R.L 2009-06-17 16:53:29 Update desde Funcion
Previous Message gorka 2009-06-17 16:04:52 Re: problema con parametros timestamp en plpgsql