Tabella temporanea
Per rispondere alla tua domanda nel titolo:
Uno non può "restituire una tabella temporanea dalla funzione postgres". Le tabelle temporanee vengono create
e automaticamente visibile allo stesso utente all'interno della stessa sessione. Vengono eliminati automaticamente alla fine della sessione (o prima).
Funzione tabella
Ma una funzione di ritorno degli insiemi (aka "funzione tabella") può essere utilizzata proprio come una tabella:
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;
Avrebbe senso solo per un gruppo di tabelle che condividono tutte i nomi di colonna codificati con lo stesso tipo di dati.
Chiama (proprio come selezionare da una tabella):
SELECT * FROM getresourceinfo(1, 'my_schema.my_tbl')
Perché il tipo di dati regclass
per il parametro della tabella?
Nome tabella come parametro di funzione PostgreSQL
Cursore
Per completezza:si può restituire un CURSOR
, che sarebbe un concetto molto simile a quello che chiedi. I dettagli nel manuale qui.
Ma non uso quasi mai i cursori. Le funzioni della tabella sono più pratiche per la maggior parte del tempo.