2 cosas jgabrielsinner10
1. Cuando utilizas una función con language 'sql', No es posible realizar sentencias for ni procedimientos de programación. Por eso es recomendable hacer uso de language 'plpgsql'.
2. Para retornar un record es necesario especificar los campos que se mostraran en la tabla que quieres ejecutar al momento de ejecutarla.
te dejo un ejemplo.
Código sql:
Ver originalpruebas=> \d sueldos
Tabla ½public.sueldos╗
Columna | Tipo | Modificadores
-------------------+--------------+---------------
id | INTEGER |
categoria | text |
unidad_tributaria | NUMERIC(6,2) |
pruebas=> \d sueldos1
Tabla ½public.sueldos1╗
Columna | Tipo | Modificadores
-------------------+-----------------------------+---------------
id | INTEGER |
categoria | text |
unidad_tributaria | text |
id_peti | INTEGER |
fecha | TIMESTAMP WITHOUT TIME zone | DEFAULT now()
tipo_servicio | text |
factracion | text |
pruebas=> CREATE OR REPLACE FUNCTION consulta(text) RETURNS setof record
pruebas-> AS
pruebas-> $body$
pruebas$> DECLARE
pruebas$> registro record;
pruebas$> SQL text;
pruebas$> BEGIN
pruebas$> SQL = 'select *from ' || $1;
pruebas$> FOR registro IN EXECUTE SQL
pruebas$> loop
pruebas$> RETURN NEXT registro;
pruebas$> END loop;
pruebas$> RETURN;
pruebas$> END;
pruebas$> $body$ LANGUAGE 'plpgsql' VOLATILE;
CREATE FUNCTION
pruebas=> SELECT *FROM consulta('sueldos') AS t(a INTEGER, b text, c NUMERIC);
a | b | c
---+---+------
6 | B | 1.12
3 | A | 1.00
7 | C | 1.37
6 | B | 1.12
3 | A | 1.00
7 | C | 1.37
(6 filas)
pruebas=> SELECT *FROM consulta('sueldos1') AS t(a INTEGER, b text, c text, d INTEGER, e TIMESTAMP,f text, g text);
a | b | c | d | e | f | g
---+---+------+----+-------------------------+--------------+-----------
6 | B | 1.12 | 20 | 2009-03-16 11:26:57.453 | sin facturar | seleccion
3 | A | 1.00 | 20 | 2009-03-16 11:26:57.453 | sin facturar | seleccion
7 | C | 1.37 | 20 | 2009-03-16 11:26:57.453 | sin facturar | seleccion
6 | B | 1.12 | 20 | 2009-03-16 11:26:57.453 | sin facturar | seleccion
3 | A | 1.00 | 20 | 2009-03-16 11:26:57.453 | sin facturar | seleccion
7 | C | 1.37 | 20 | 2009-03-16 11:26:57.453 | sin facturar | seleccion
8 | A | 1 | 18 | 2009-03-27 08:22:44.953 | facturado | seleccion
(7 filas)
saludos