Возвращает динамическую таблицу с неизвестными столбцами из функции PL / pgSQL
Мне нужно создать функцию, которая проверяет заданную таблицу, еслиinfowindow
поле существует. Если она существует, функция должна вернутьselect * from table
но если это не так, он должен вернуть дополнительныйid
поле:
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;
Если я используюRETURNS SETOF RECORDS
Когда я делаю выбор функции, мне нужно указать столбцы, которые я не знаю. И если я используюRETURNS TABLE
Мне нужно также указать поля, поэтому я не знаю, как это сделать.