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

come restituire la tabella temporanea dalla funzione postgres?

Tabella temporanea

Per rispondere alla tua domanda nel titolo:
Uno non può "restituire una tabella temporanea dalla funzione postgres". Le tabelle temporanee vengono create e automaticamente visibile allo stesso utente all'interno della stessa sessione. Vengono eliminati automaticamente alla fine della sessione (o prima).

Funzione tabella

Ma una funzione di ritorno degli insiemi (aka "funzione tabella") può essere utilizzata proprio come una tabella:

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;

Avrebbe senso solo per un gruppo di tabelle che condividono tutte i nomi di colonna codificati con lo stesso tipo di dati.
Chiama (proprio come selezionare da una tabella):

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

Perché il tipo di dati regclass per il parametro della tabella?
Nome tabella come parametro di funzione PostgreSQL

Cursore

Per completezza:si può restituire un CURSOR , che sarebbe un concetto molto simile a quello che chiedi. I dettagli nel manuale qui.
Ma non uso quasi mai i cursori. Le funzioni della tabella sono più pratiche per la maggior parte del tempo.