Estimados usuarios de la lista:

Con la idea de no tener que repetir sistemáticamente una consulta bastante larga, la he introducido en el interior de una función de manera que sólo necesito invocarla con uno o dos parámetros para obtener el resultado deseado. La función es:

CREATE OR REPLACE FUNCTION difbpm(mes int,puer varchar,espc varchar default '10156',espec varchar default 'ANE') RETURNS TABLE(barco varchar,peso_sireno numeric,peso_hventa numeric, diferencia numeric)
AS $$
BEGIN
RETUNR QUERY
WITH
sireno as(
SELECT
  bardes as barco,
  sum(pvivo) as peso
from cap2012
WHERE
  mes(fecha)=$1
  and puedes=$2
  and espcod=$3
GROUP BY 1
),
hojas as(
SELECT
nombre_buque as barco,
sum(pesoventa) as peso
from hventa
WHERE
al3=$4
and puerto_desembarque=$2
and mes(fecha_venta)=$1
GROUP BY 1)

SELECT
sireno.barco as barco,
sireno.peso as peso_sireno,
hojas.peso as peso_hventa,
sireno.peso-hojas.peso as diferencia
FROM
sireno,hojas
WHERE
sireno.barco=hojas.barco and
sireno.peso!=hojas.peso
order by 1;
END;
$$
LANGUAGE 'plpgsql';

Ahora bien, si yo simplemente invoco la función como;

triki-triki=# select difbpm(7,'NUEVA YORK');

Obtengo como resultado:

                      difbpm
---------------------------------------------------
 ("EL CHUBASCO",378.000,644.00,-266.000)
 ("EL COMIA",13601.000,13979.00,-378.000)
 ("NUEVO SIRENA MAR",16737.000,18123.00,-1386.000)

En lugar de la versión más apropiada que obtengo mediante

triki-triki=# select * from difbpm(7,'NUEVA YORK');

      barco       | peso_sireno | peso_hventa | diferencia
------------------+-------------+-------------+------------
 EL CHUBASCO      |     378.000 |      644.00 | -266.000
 EL COMIA         |   13601.000 |    13979.00 | -378.000
 NUEVO SIRENA MAR |   16737.000 |    18123.00 | -1386.000

He estado mirando en google pero creo que, en principio, he hecho las cosas correctamente, no sé si existe alguna manera de que la función devuelva la tabla pura y dura, en lugar de esa suerte de tupla en bruto.
¿Existe alguna solución?

Un saludo y muchas gracias por vuestro tiempo.

Jorge Tornero
Instituto Español de Oceanografía
Centro Oceanográfico de Cádiz
www.ieo.es
Página personal http://imasdemase.com

El 05/05/12 20:20, Sergio Sinuco escribió:
Puede utilizar pgagent

http://www.pgadmin.org/docs/1.4/pgagent.html



El 5 de mayo de 2012 12:24, Marcos Michel Martinez Perez <mmartin...@estudiantes.uci.cu <mailto:mmartin...@estudiantes.uci.cu>> escribió:

    como puedo hacer que el postgres me ejecute una funcion cada un
    tiempo determinado

-- _________________________________________________
             | "Ninguna persona merece tus lágrimas y quién se |
             |         las merezca no te hará llorar"          |
             |  _____________________________________________  |
                  |              Marcos M. Martínez                 |
             |  UCI - Universidad de las Ciencias Informáticas |        
             |_________________________________________________

Responder a