Retornar tabela dinâmica com colunas desconhecidas da função PL / pgSQL
Preciso criar uma função que verifique em uma determinada tabela se oinfowindow
campo existe. Se existir, a função deve retornarselect * from table
mas, caso contrário, ele deve retornar um adicionalid
campo:
CREATE OR REPLACE FUNCTION getxo_ocx_cincu_preparar_infowindow(
guretabla character varying)
RETURNS TABLE AS
$BODY$
DECLARE
tabla ALIAS FOR $1;
BEGIN
IF EXISTS (SELECT 1
FROM pg_namespace n
JOIN pg_class c ON c.relnamespace = n.oid
JOIN pg_attribute a ON a.attrelid = c.oid
WHERE n.nspname = current_schema() -- default to current schema
AND c.relname = tabla
AND a.attname = 'infowindow'
AND NOT a.attisdropped)
THEN
RETURN QUERY EXECUTE 'SELECT * from ' ||tabla ;
ELSE
RETURN QUERY EXECUTE 'SELECT *, ID:' || id::text ||' as infowindow
from ' ||tabla ;
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
Se eu usarRETURNS SETOF RECORDS
, quando faço a seleção da função, preciso especificar as colunas que não conheço. E se eu usarRETURNS TABLE
Também preciso especificar os campos, para não saber como fazê-lo.