sql >> データベース >  >> RDS >> PostgreSQL

postgres関数から一時テーブルを返す方法は?

    一時テーブル

    タイトルの質問に答えるには:
    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を返すことができます 、これはあなたが求めているものと非常によく似た概念です。 マニュアルの詳細はこちら
    しかし、私はカーソルをほとんど使用しません。ほとんどの場合、テーブル関数の方が実用的です。




    1. matlabsデータベースツールボックスなしでmatlabからpostgresqlデータベースにアクセスするにはどうすればよいですか?

    2. 同じテーブルを異なる列で2回結合する

    3. 販売データベースを持つことの利点は何ですか?

    4. レコードが存在する場合は、他の挿入を更新します