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

prod2011 @ yahoo.co.jp prod2011 @ yahoo.co.jp
2013年 10月 29日 (火) 09:11:47 JST


MauMauさん

prodです。
ほぼ完璧なご回答いただきまして、ありがとうございます。

MauMauさんのご回答で、
自分では、いろいろ調べたつもりでしたが、
まだまだ勉強不足と痛感いたしました。

とても助かりました。ありがとうございました。



----- Original Message -----
> From: MauMau <maumau307 @ gmail.com>
> To: prod2011 @ yahoo.co.jp; PostgreSQL Japanese Mailing List <pgsql-jp @ ml.postgresql.jp>
> Cc: 
> Date: 2013/10/28, Mon 22:32
> Subject: Re: [pgsql-jp: 41519] create temp table での pg_temp スキーマについて
> 
> 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 メーリングリストの案内