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
<[email protected]>escribió:
> 2009/5/21 Luis A. Zevallos Cárdenas <[email protected]>:
> >
> > 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