sql >> Database teknologi >  >> RDS >> PostgreSQL

hvordan man returnerer temp tabel fra postgres funktion?

Midlertidig tabel

For at besvare dit spørgsmål i titlen:
Man kan ikke "retur en temp-tabel fra postgres-funktionen". Midlertidige tabeller er oprettet og automatisk synlig for den samme bruger i samme session. De slettes automatisk i slutningen af ​​sessionen (eller før).

Tabelfunktion

Men en sæt-returnerende funktion (a.k.a. "tabelfunktion") kan bruges ligesom en tabel:

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;

Ville kun give mening for en masse tabeller, der alle deler de hårdkodede kolonnenavne med den samme datatype.
Ring (ligesom at vælge fra en tabel):

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

Hvorfor datatypen regclass for tabelparameteren?
Tabelnavn som en PostgreSQL-funktionsparameter

Markør

For fuldstændighedens skyld:Man kan returnere en CURSOR , hvilket ville være et meget lignende koncept som det, du beder om. Detaljer i manualen her.
Men jeg bruger næsten aldrig markører. Bordfunktioner er mere praktiske det meste af tiden.




  1. Tilføjelse af timer, minutter, sekunder til SQL Date

  2. Adgang til en tabel uden at angive skemanavnet

  3. SQLAlchemy PÅ DUBLIKAT NØGLEOPDATERING

  4. Hvorfor returnerer st_intersection ikke-polygoner?