PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie kann ich die temporäre Tabelle von der Postgres-Funktion zurückgeben?

Temporäre Tabelle

Um Ihre Frage im Titel zu beantworten:
Man kann nicht "Geben Sie eine temporäre Tabelle von der Postgres-Funktion zurück". Temporäre Tabellen werden erstellt und automatisch für denselben Benutzer innerhalb derselben Sitzung sichtbar. Sie werden am Ende der Sitzung (oder früher) automatisch gelöscht.

Tabellenfunktion

Aber eine Satz-zurückgebende Funktion (auch bekannt als "Tabellenfunktion") kann genau wie eine Tabelle verwendet werden:

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;

Wäre nur sinnvoll für eine Reihe von Tabellen, die alle die fest codierten Spaltennamen mit demselben Datentyp teilen.
Aufruf (genau wie bei der Auswahl aus einer Tabelle):

SELECT * FROM getresourceinfo(1, 'my_schema.my_tbl')

Warum der Datentyp regclass für den Tabellenparameter?
Tabellenname als PostgreSQL-Funktionsparameter

Cursor

Der Vollständigkeit halber:Man kann einen CURSOR zurückgeben , was ein sehr ähnliches Konzept wäre wie das, wonach Sie fragen. Details im Handbuch hier.
Aber ich benutze kaum Cursor. Tabellenfunktionen sind meistens praktischer.