Muchas gracias a todos
lo resolvi asi:

drop FUNCTION sch_clinica.fn_size_tables();
CREATE OR REPLACE FUNCTION sch_clinica.fn_size_tables(out nombre_objeto
text, out tamano_mg numeric)
 RETURNS
 SETOF
 RECORD
 AS
 $body$
 DECLARE
  rec record;
 BEGIN
  FOR rec IN (
    SELECT relname as nombre, round(((relpages*8)::double
precision/1024::double precision)::numeric,2) as campo2
    FROM pg_class
    ORDER BY relpages DESC)
  LOOP
    nombre_objeto:=rec.nombre;
    tamano_mg:=rec.campo2;
    RETURN NEXT;
   END LOOP;
  RETURN;
 END;
 $body$
  LANGUAGE 'plpgsql';

  select * from sch_clinica.fn_size_tables();

Gracias y saludos.

El 21 de mayo de 2009 13:08, Jaime Casanova
<jcasa...@systemguards.com.ec>escribió:

> 2009/5/21 Luis A. Zevallos Cárdenas <lzeval...@lobosistemas.com>:
> >
> >  select *  FROM sch_desarrollo.fn_size_tables() --- CONSULTA
> >
> > ERROR
> >
> *****************************************************************************************************************
> > ERROR:  se requiere una lista de definición de columnas para funciones
> que
> > retornan «record»
> >
>
> Debes indicarle a postgres cuantas y de que tipo son las columnas que
> se regresan en el record, eso lo puedes hacer al momento de ejecutar
> el select haciendo algo como:
>
> select *  FROM sch_desarrollo.fn_size_tables() AS (col1 tipodato1 [,
> col2 tipodato2, ...])
>
> o bien al definir la funcion usando parametros OUT
>
> CREATE FUNCTION fn_size_tables(OUT col1 tipodato1 [, OUT col2
> tipodato2, ...]) RETURNS RECORD AS ...
>
> si escoges la segunda forma la manera de invocar tu select no cambia a
> lo que tienes ahora...
>
> --
> Atentamente,
> Jaime Casanova
> Soporte y capacitación de PostgreSQL
> Asesoría y desarrollo de sistemas
> Guayaquil - Ecuador
> Cel. +59387171157
>



-- 
Luis Zevallos
DBA Administrador de  DB & SRVR
Lobo Sistemas S.A.C
tel: +5154958310833
http://www.lobosistemas.com

Responder a