[pgsql-jp: 41183] Re: 一時テーブルに関して

Tatsuo Ishii ishii @ sraoss.co.jp
2012年 8月 10日 (金) 08:46:41 JST


石井です。

> 笠原と申します。
> 
>> 解決策としては、テーブルの作成と削除を明示的に行ない、
>> 1つの関数内など短期間で使用するぶんにはなんら問題は
>> 無いように思うのですが、間違っているでしょうか。
> いえ、そのような用途であれば、一時テーブルを使う上で問題は無いと思います。
> 
> ただ、過去のPostgreSQLのバージョン(8.3より前)では、例えばPL/pgSQLで作成した
> 関数内での一時テーブルの使用がうまく行かないといった問題もありました。
> # 上記は、厳密に言えば PL/pgSQLの仕様の影響ですが・・・
>  PL/pgSQLで作成された関数がキャッシュされる関係で、複数回関数を実施した際、
>  2回目の実施時に既に存在しない一時テーブルを処理対象にしてしまいエラーとなる
>  問題がありました。
>  http://wiki.postgresql.org/wiki/FAQ/ja
> 
>> 試してはいないのですが、pgpool-IIなどでコネクションプール
>> を利用しているときは、ユーザー側でコネクションの制御が
>> 難しくなるのでそのあたりが関係するのかなと思っています。
> 確かに、コネクションプールのような形態ですと、うっかり一時テーブルが
> 残存していたり、などの問題が発生しやすくなると思います。

皆さんご存知とは思いますが、一応念の為。

pgpool-IIに関して言えば、DISCARD ALLが実装されているPostgreSQL 8.3以降
と組み合わせて使用するのであれば、pgpool-IIがユーザのセッション終了時に
DISCARD ALLを発行して一時テーブルなどを消去するため、一時テーブルが残存
するなどの問題は起きないはずです。
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese: http://www.sraoss.co.jp


pgsql-jp メーリングリストの案内