Midlertidig tabel
For at besvare dit spørgsmål i titlen:
Man kan ikke "retur en temp-tabel fra postgres-funktionen". Midlertidige tabeller er oprettet
og automatisk synlig for den samme bruger i samme session. De slettes automatisk i slutningen af sessionen (eller før).
Tabelfunktion
Men en sæt-returnerende funktion (a.k.a. "tabelfunktion") kan bruges ligesom en tabel:
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;
Ville kun give mening for en masse tabeller, der alle deler de hårdkodede kolonnenavne med den samme datatype.
Ring (ligesom at vælge fra en tabel):
SELECT * FROM getresourceinfo(1, 'my_schema.my_tbl')
Hvorfor datatypen regclass
for tabelparameteren?
Tabelnavn som en PostgreSQL-funktionsparameter
Markør
For fuldstændighedens skyld:Man kan returnere en CURSOR
, hvilket ville være et meget lignende koncept som det, du beder om. Detaljer i manualen her.
Men jeg bruger næsten aldrig markører. Bordfunktioner er mere praktiske det meste af tiden.