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