Tijdelijke tafel
Om je vraag in de titel te beantwoorden:
Eén kan niet "retourneer een tijdelijke tabel van de postgres-functie". Tijdelijke tabellen worden gemaakt
en automatisch zichtbaar voor dezelfde gebruiker binnen dezelfde sessie. Ze worden automatisch verwijderd aan het einde van de sessie (of eerder).
Tabelfunctie
Maar een set-retourfunctie (ook bekend als "tabelfunctie") kan net als een tabel worden gebruikt:
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;
Zou alleen zinvol zijn voor een aantal tabellen die allemaal de hardgecodeerde kolomnamen delen met hetzelfde gegevenstype.
Bellen (net als selecteren uit een tabel):
SELECT * FROM getresourceinfo(1, 'my_schema.my_tbl')
Waarom het gegevenstype regclass
voor de tabelparameter?
Tabelnaam als een PostgreSQL-functieparameter
Cursor
Voor de volledigheid:men kan een CURSOR
. teruggeven , wat een zeer vergelijkbaar concept zou zijn als waar u om vraagt. Details in de handleiding hier.
Maar ik gebruik bijna nooit cursors. Tabelfuncties zijn meestal praktischer.