Tillfälligt bord
För att svara på din fråga i rubriken:
En kan inte "retur en temp tabell från postgres funktion". Tillfälliga tabeller skapas
och automatiskt synlig för samma användare inom samma session. De tas bort automatiskt i slutet av sessionen (eller tidigare).
Tabellfunktion
Men en set-returnerande funktion (a.k.a. "tabellfunktion") kan användas precis som en tabell:
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;
Skulle bara vara vettigt för ett gäng tabeller som alla delar de hårdkodade kolumnnamnen med samma datatyp.
Ring (precis som att välja från en tabell):
SELECT * FROM getresourceinfo(1, 'my_schema.my_tbl')
Varför datatypen regclass
för tabellparametern?
Tabellnamn som en PostgreSQL-funktionsparameter
Markör
För fullständighetens skull:Man kan returnera en CURSOR
, vilket skulle vara ett mycket liknande koncept som det du ber om. Detaljer i manualen här.
Men jag använder nästan aldrig markörer. Bordsfunktioner är mer praktiska för det mesta.