web-dev-qa-db-ja.com

単一の接続またはユーザーまたはクライアントホストのすべてのSQLクエリをログに記録する方法

Postgres 9.3.9で単一の接続またはユーザーまたはクライアントホストのすべてのSQLクエリをログに記録する方法はありますか?

つまり、log_statement = allが、特定のユーザー名またはクライアントのホスト名またはクライアントのIPまたは接続IDの場合のみ。

1つのオプションは、すべてのクライアントのSQLアクティビティをログに記録し、ログを検索することです。もっと良い方法があるといいのですが。

5
sevzas

私はクライアントホストでそれを行う方法を知りませんが、単一のデータベースユーザーの場合、これを(スーパーユーザーとして)使用できます。

ALTER ROLE someone SET log_statement TO 'all';

その後、そのsomeoneが接続するたびにlog_statementがオンになります。

あなたと協力している単一の接続の場合、この機能を(スーパーユーザーとして)作成できます。

create or replace function set_log_statement() returns void as $$
 set log_statement='all' 
$$ language sql security definer ;

次に、目的の単一接続でこの関数を呼び出して、それ自体のロギングをオンにします。

5
jjanes