PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

comment renvoyer la table temporaire de la fonction postgres?

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.