Dočasný stůl
Odpověď na vaši otázku v nadpisu:
Jeden nemůže "vrátit dočasnou tabulku z funkce postgres". Dočasné tabulky jsou vytvořeny
a automaticky viditelné pro stejného uživatele v rámci stejné relace. Jsou automaticky vypuštěny na konci relace (nebo dříve).
Tabulková funkce
Ale funkci vracení množin (neboli „tabulková funkce“) lze použít stejně jako tabulku:
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;
Mělo by to smysl pouze pro hromadu tabulek, které všechny sdílejí pevně zakódované názvy sloupců se stejným datovým typem.
Volání (stejně jako výběr z tabulky):
SELECT * FROM getresourceinfo(1, 'my_schema.my_tbl')
Proč datový typ regclass
pro parametr tabulky?
Název tabulky jako parametr funkce PostgreSQL
Kurzor
Pro úplnost:Lze vrátit CURSOR
, což by byl velmi podobný koncept, jaký požadujete. Podrobnosti v příručce zde.
Ale kurzory téměř nikdy nepoužívám. Tabulkové funkce jsou většinou praktičtější.