Tableau temporaire
Pour répondre à votre question dans le titre :
On ne peut pas "renvoie une table temporaire à partir de la fonction postgres". Les tables temporaires sont créées
et automatiquement visible par le même utilisateur au cours de la même session. Ils sont supprimés automatiquement à la fin de la session (ou plus tôt).
Fonction tableau
Mais une fonction renvoyant un ensemble (alias "fonction de table") peut être utilisée comme une table :
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;
Cela n'aurait de sens que pour un groupe de tables qui partagent toutes les noms de colonne codés en dur avec le même type de données.
Appelez (comme si vous sélectionniez dans une table) :
SELECT * FROM getresourceinfo(1, 'my_schema.my_tbl')
Pourquoi le type de données regclass
pour le paramètre de table ?
Nom de table en tant que paramètre de fonction PostgreSQL
Curseur
Pour être complet :on peut renvoyer un CURSOR
, ce qui serait un concept très similaire à ce que vous demandez. Détails dans le manuel ici.
Mais je n'utilise presque jamais les curseurs. Les fonctions de tableau sont la plupart du temps plus pratiques.