Temporäre Tabelle
Um Ihre Frage im Titel zu beantworten:
Man kann nicht "Geben Sie eine temporäre Tabelle von der Postgres-Funktion zurück". Temporäre Tabellen werden erstellt
und automatisch für denselben Benutzer innerhalb derselben Sitzung sichtbar. Sie werden am Ende der Sitzung (oder früher) automatisch gelöscht.
Tabellenfunktion
Aber eine Satz-zurückgebende Funktion (auch bekannt als "Tabellenfunktion") kann genau wie eine Tabelle verwendet werden:
CREATE OR REPLACE FUNCTION getresourceinfo(tablename regclass, opened_path int)
RETURNS TABLE (pathid int, name varchar, pbs varchar
, parentid varchar, resid int) AS
$func$
BEGIN
RETURN QUERY EXECUTE format(
'SELECT t.pathid, t.name, t.pbs, t.parentid, t.resid
FROM ' || tablename || ' t
WHERE t.opened_path = $1'
)
USING opened_path;
END
$func$ LANGUAGE plpgsql;
Wäre nur sinnvoll für eine Reihe von Tabellen, die alle die fest codierten Spaltennamen mit demselben Datentyp teilen.
Aufruf (genau wie bei der Auswahl aus einer Tabelle):
SELECT * FROM getresourceinfo(1, 'my_schema.my_tbl')
Warum der Datentyp regclass
für den Tabellenparameter?
Tabellenname als PostgreSQL-Funktionsparameter
Cursor
Der Vollständigkeit halber:Man kann einen CURSOR
zurückgeben , was ein sehr ähnliches Konzept wäre wie das, wonach Sie fragen. Details im Handbuch hier.
Aber ich benutze kaum Cursor. Tabellenfunktionen sind meistens praktischer.