postgresの他のセッションの一時テーブルにアクセスする方法はありますか?


17

(ローカル)postgresデータベースを使用し、一時テーブルにいくつかの情報を保存するWindowsアプリケーションを使用しています。一時テーブルをご覧になりたいのですが、pgadminとdbVisは次のように言っています:ERROR: cannot access temporary tables of other sessionsデータを照会するとき。スキーマとテーブルの権限を変更しようとしましたが、プログラム自体と同じユーザー(少なくともdbVisで)でデータベースにアクセスしているにもかかわらず、これは役に立たないようです。データベース内のすべてのセッションへの「ルート」アクセスを許可するデータベースで変更できる設定はありますか?

回答:


14

他のセッションで一時テーブルにアクセスできないことは、許可の問題ではなく、設計の技術的な制限です。PostgreSQLバックエンド、同時アクセスを許可する通常のハウスキーピングが一時テーブルに対して行われないため、別のバックエンドの一時テーブルにアクセスできません

9.2 UNLOGGEDでは、代わりにテーブルを使用します。これは他のセッションから見ることができますが、一時テーブルのパフォーマンス上の利点のほとんどは保持されます。


11

短い答えは「いいえ」です。他のセッションの一時テーブルは、設計上見えません。2つのセッションのユーザーが同じ場合、違いはありません。でも:

autovacuumデーモンはアクセスできないため、一時テーブルをバキュームまたは分析できません。


一時テーブルが削除された場合、メモリまたはディスクリソースを削除するためにバキュームが必要ですか?私はこの問題を解決しようとしていますが、autovacuumが一時テーブルを見ることができないという事実がメモリリークの理由であるかどうかはわかりません。手動で掃除機をかける必要がありますか?
豪華な

「一時テーブルが削除されるとき、それらはバキュームを必要としますか」いいえ、ここを見てください。一時テーブルだけでなく、すべてのテーブルに同じことが当てはまります。
ジャックダグラス

3

これがあなたに役立つかどうかはわかりませんが、試してみてください。

次のシステムカタログテーブルクエリは、データベース内の他のセッションで作成されたすべての一時テーブルを一覧表示できます。

pg_class pcからpn.nspname、pc.relname、pg.namespace pnを選択します。ここでpc.relnamespace = pn.oidおよびpc.relname ilike 'your_temp_table_name';

PostgreSQLのドキュメントごとに、Temporary tables exist in a special schema通常はという名前で作成されpg_temp_xxxます。したがって、を使用しschemanameます。relationname上記のクエリから、一時テーブルをクエリできるはずです。ここでわかるように、一時テーブルはスキーマ修飾名で参照されます。

例: select * from pg_temp_20.your_temp_table_name


1
ヒントをありがとう。dbvis(おそらく最初に言及したクエリを使用する)を使用して一時テーブルの名前とスキーマを見つけることができましたが、問題はそれらが作成されたセッション以外からアクセスできないことでした。
-newenglander
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.