Tabela tymczasowa
Aby odpowiedzieć na Twoje pytanie w tytule:
Jedno nie można "zwróć tabelę tymczasową z funkcji postgres". Tworzą się tymczasowe tabele
i automatycznie widoczne dla tego samego użytkownika w ramach tej samej sesji. Są one automatycznie usuwane na koniec sesji (lub wcześniej).
Funkcja tabeli
Ale funkcja zwracająca zestaw (znana również jako „funkcja tabeli”) może być używana tak samo jak 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;
Miałoby to sens tylko w przypadku kilku tabel, z których wszystkie mają zakodowane na stałe nazwy kolumn z tym samym typem danych.
Wywołaj (tak jak wybieranie z tabeli):
SELECT * FROM getresourceinfo(1, 'my_schema.my_tbl')
Dlaczego typ danych regclass
dla parametru tabeli?
Nazwa tabeli jako parametr funkcji PostgreSQL
Kursor
Dla kompletności:można zwrócić CURSOR
, co byłoby bardzo podobne do tego, o co prosisz. Szczegóły w instrukcji tutaj.
Ale rzadko używam kursorów. Funkcje tabeli są przez większość czasu bardziej praktyczne.