2

PL/PGSQL関数を書いています。これには、クエリの結果の処理が含まれます。ドキュメントのIIRCは、SELECT INTOこの場合は機能しませんが、一時テーブルを作成することでクエリ結果を保存できます。

次のクイックテストを実行します。

create function foo() returns numeric as $body$ 
begin 
  create temporary table footable as 
  select * from some_table; 

  return 1.23; 
end; 
$body$ language plpgsql;

次に、次のようにテストを実行します。

select * from foo();
1.23
select * from foo();
ERROR:  relation "footable" already exists
CONTEXT:  SQL statement "create temporary table footable as select * from 
          some_table"
PL/pgSQL function "foo" line 1 at SQL statement

では、後でストアドプロシージャで使用できるように、クエリの結果を変数に一時的にキャッシュするにはどうすればよいですか?

PG8.4を使用しています。

4

2 に答える 2

2

一時テーブルは、現在のセッションの終了時に破棄されます(トランザクションではありません)。CREATEステートメントを次のように変更することで、コミット/ロールバック後に非表示にすることができます。

CREATE TEMPORARY TABLE footable ... ON COMMIT DROP;

もちろん、エラーが発生するため、トランザクションごとにこれを複数回実行することはでき ませCREATEん。relation "footable" already exists

于 2012-07-18T07:57:38.157 に答える
2

他にも方法があります。通常、最良の方法は、セッションごとに1回だけ一時テーブルを作成することです。を参照してください。

于 2012-07-18T09:16:17.767 に答える