[pgsql-jp: 41520] Re: create temp table での pg_temp スキーマについて

MauMau maumau307 @ gmail.com
2013年 10月 28日 (月) 22:32:55 JST


prodさん


MauMauといいます。

1.上限はあります。max_connections + max_autovacuum_workers + 1です。
一時テーブルを作成できなくなることはありません。
スキーマ名中の数字は、各セッションに割り当てられる「バックエンドID」という番号です。
1~max_connections + max_autovacuum_workers + 1の範囲の値をとります。
各セッションではじめて一時テーブルを作成するとき、
pg_temp_<バックエンドID>
pg_toast_temp_<バックエンドID>
というスキーマが作られます。
そして、その中に以降のテーブルが作られます。
すでにスキーマが存在すれば、そのスキーマを使います。

2.自動的には削除されません。
セッションの終了時に、そのセッションで作られた一時テーブルは削除されますが、スキーマは残されます。
これは、新たなセッションで同じスキーマを再作成する手間を省くためです。

3.上記のとおり、ご心配の問題はありません。

4.pg_namespaceです。


以上です。

----- Original Message ----- 
From: <prod2011 @ yahoo.co.jp>
To: <pgsql-jp @ ml.postgresql.jp>
Sent: Monday, October 28, 2013 8:06 PM
Subject: [pgsql-jp: 41519] create temp table での pg_temp スキーマについて


はじめまして。
初めて投稿させていただきました、prodと申します。
よろしくお願いいたします。

早速なのですが、postgresで、テンポラリーテーブルを使うと、
勝手にpg_temp_?、pg_toast_temp_?がどんどん増えていき、
これは何か対応が必要なのか?という部分がわからず、わかる方が
いらっしゃいましたら、ご教授いただきればとありがたいです。

環境は以下です
サーバOS:Red Hat Enterprise Linux Server release 5.3
Postgresバージョン:PostgreSQL 9.1.2

具体的な質問を記載いたします。
1.pg_tempスキーマは、数の上限があるのでしょうか?
一定以上に達すると、create temp table ができなくなる等ありますでしょうか?

2.pg_tempスキーマは、自動的に削除されるものなのでしょうか?
それとも、意図的に何か処理をして、消すものなのでしょうか?
※ 勝手に削除されているようには、見えなかったため。
※ vacuumdb --full をやっても消えませんでした。
※ 手動で、drop schema とすると削除できました。

3.pg_tempスキーマが自動的に削除されない場合、
スキーマの数はどんなに増えても、問題ないのもなのでしょうか?
※ 単純に、スキーマが増えると、カタログ等にゴミデータが多くなり、
DBが全体的に遅くなるのでは?との不安があるため。

4.pg_tempスキーマをselectで取得する方法がわかりませんでした。
select * from pg_database
select * from pg_class
のいずれでも、わかりませんでした。
取得SQLがわかりましたら、教えていただければと思います。
※ pg_temp スキーマを抽出できれば、一定間隔で、不要スキーマの
削除処理を作成できると考えているため。

以上
よろしくお願いいたします。




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