一時テーブル
タイトルの質問に答えるには:
1つはできません 「postgres関数から一時テーブルを返す」。 一時テーブルが作成されます
同じセッション内の同じユーザーに自動的に表示されます。それらはセッションの終了時(またはそれより早く)に自動的に削除されます。
テーブル関数
ただし、セットを返す関数(別名「テーブル関数」)は、テーブルと同じように使用できます。
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;
すべてが同じデータ型のハードコードされた列名を共有する一連のテーブルに対してのみ意味があります。
呼び出し(テーブルから選択するのと同じように):
SELECT * FROM getresourceinfo(1, 'my_schema.my_tbl')
データ型がregclass
である理由 テーブルパラメータについては?
PostgreSQL関数パラメータとしてのテーブル名
カーソル
完全を期すために:CURSOR
を返すことができます 、これはあなたが求めているものと非常によく似た概念です。 マニュアルの詳細はこちら
しかし、私はカーソルをほとんど使用しません。ほとんどの場合、テーブル関数の方が実用的です。