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.