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

dba.stackexchange https://dba.stackexchange.com/questions/5236

  •  16-10-2019
  •  | 
  •  

質問

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

役に立ちましたか?

解決

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

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

他のヒント

短い答えは「いいえ」です。 一時テーブル 他のセッションで 目に見えません 意図的に。 2つのセッションが同じユーザーを持っている場合、違いはありません。平:

Autovacuumデーモンはアクセスできないため、一時テーブルを掃除機または分析することはできません

これがあなたを助けることができるかどうかはわかりませんが、試してみることができます。

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

pn.nspname、pc.relname pg_class pc、pg_namespace pn from pc.relnamespace = pn.oid and pc.relname ilike 'your_temp_table_name';を選択します。

PostgreSqlごと doc, Temporary tables exist in a special schema 通常、名前が付けられて作成されます pg_temp_xxx. 。だから、使用 schemaname.relationname 上記のクエリから、一時テーブルを照会できるはずです。ここで見ることができるように、一時テーブルはスキーマ資格のある名前で参照されます。

例: select * from pg_temp_20.your_temp_table_name

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top