PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

como retornar a tabela temporária da função postgres?

Tabela temporária


Para responder à sua pergunta no título:
Um não pode "retorne uma tabela temporária da função postgres". Tabelas temporárias são criadas e automaticamente visível para o mesmo usuário na mesma sessão. Eles são descartados automaticamente no final da sessão (ou antes).

Função de tabela


Mas uma função de retorno de conjunto (também conhecida como "função de tabela") pode ser usada como uma tabela:
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;

Só faria sentido para um monte de tabelas que compartilham os nomes das colunas codificados com o mesmo tipo de dados.
Chamada (assim como selecionar de uma tabela):
SELECT * FROM getresourceinfo(1, 'my_schema.my_tbl')

Por que o tipo de dados regclass para o parâmetro de tabela?
Nome da tabela como parâmetro de função do PostgreSQL

Cursor


Para completar:Pode-se retornar um CURSOR , que seria um conceito muito semelhante ao que você pede. Detalhes no manual aqui.
Mas quase nunca uso cursores. As funções de tabela são mais práticas na maioria das vezes.