Gibt eine dynamische Tabelle mit unbekannten Spalten aus der PL / pgSQL-Funktion zurück

Ich muss eine Funktion erstellen, die für eine bestimmte Tabelle prüft, ob dieinfowindow Feld existiert. Wenn es existiert, muss die Funktion zurückkehrenselect * from table Wenn dies nicht der Fall ist, muss ein zusätzlicher Wert zurückgegeben werdenid Feld:

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;

Wenn ich benutzeRETURNS SETOF RECORDSWenn ich die Funktion auswähle, muss ich die Spalten angeben, die ich nicht kenne. Und wenn ich benutzeRETURNS TABLE Ich muss auch die Felder angeben, damit ich nicht weiß, wie es geht.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage