sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo devolver la tabla temporal desde la función de postgres?

Mesa temporal

Para responder a su pregunta en el título:
Uno no puede "devolver una tabla temporal desde la función de postgres". Las tablas temporales se crean y automáticamente visible para el mismo usuario dentro de la misma sesión. Se eliminan automáticamente al final de la sesión (o antes).

Función de tabla

Pero una función de devolución de conjuntos (también conocida como "función de tabla") se puede usar como una tabla:

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;

Solo tendría sentido para un montón de tablas que comparten los nombres de columna codificados con el mismo tipo de datos.
Llamar (como seleccionar de una tabla):

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

Por qué el tipo de datos regclass para el parámetro de la tabla?
Nombre de tabla como parámetro de función de PostgreSQL

Cursores

Para completar:se puede devolver un CURSOR , que sería un concepto muy similar al que pides. Detalles en el manual aquí.
Pero casi nunca uso cursores. Las funciones de mesa son más prácticas la mayor parte del tiempo.