sql >> データベース >  >> RDS >> PostgreSQL

すべてのアクティブなセッションに対して準備されたすべてのステートメントを一覧表示するにはどうすればよいですか?

    いいえ。 AFAIKプリペアドステートメントはバックエンドに対してローカルです。他のバックエンドは、それらが存在することを知らないだけです。サーバーを変更してプロセス間通信を追加し、1つのバックエンドが他のバックエンドにプリペアドステートメントについて質問できるようにする必要があります。

    バックエンドは当初、同じpg_prepared_statementsを共有しているように見えました テーブルストレージ、次のように:

    SELECT relfilenode FROM pg_class WHERE  relname = 'pg_prepared_statements';
    

    異なるバックエンドから同じrelfilenodeを返します。プリペアドステートメントにはディスク上に存在しないと思ったので、私は驚きました。それらがディスク上にある場合は、pageinspectcontribモジュールの関数を使用できると思います。 生のタプルまたはテーブルページを読み取ります。視認性が問題になります。デッド/終了したバックエンドに何が関連していて、何が有効であったかをどのようにして知ることができますか?

    それを試してみたところ、pg_prepared_statements 実際にはビューです:

    regress=# SELECT * FROM heap_page_items(get_raw_page('pg_prepared_statements', 1));
    ERROR:  cannot get raw page from view "pg_prepared_statements"
    

    具体的には、pg_prepared_statement()のビューです。 関数。したがって、検査するものは何もありません。内部のバックエンドです。

    これはそれらの1つのように思えます「...しかし、なぜあなたはそれをするのですか?」質問。これは、多くの場合、誰かが解決策について質問している兆候です。 彼らは彼らの本当の問題について尋ねるのではなく、彼らの本当の問題を思い描いていました。

    だから:なぜあなたはそれが欲しいのですか?あなたが解決しようとしている本当の問題は何ですか?




    1. SQL Server Management Studio 2008でスクリプトの生成タスクを自動化するにはどうすればよいですか?

    2. 'MySql.Data.MySqlClient'ADO.NETプロバイダーのEntityFrameworkプロバイダーが見つかりません

    3. Laravel5.4で外部キーbigIntegerをbigIncrementsに設定する

    4. 接続プールは、1つの接続を開いたままにするよりも低速です