如何记录单个连接或用户或客户端主机的所有 SQL 查询?

sev*_*zas 6 postgresql log postgresql-9.3

有没有办法在 Postgres 9.3.9 中记录单个连接或用户或客户端主机的所有 SQL 查询?

换句话说,我log_statement = all只想要某个用户名或客户端主机名或客户端 IP 或连接 ID。

一种选择是记录所有客户端的 SQL 活动并搜索日志。我希望有更好的方法。

jja*_*nes 5

我不知道如何为客户端主机执行此操作,但是对于单个数据库用户,您可以使用它(作为超级用户):

ALTER ROLE someone SET log_statement TO 'all';
Run Code Online (Sandbox Code Playgroud)

以后每次someone连接时都会打开 log_statement 。

对于与您合作的单个连接,您可以创建此功能(作为超级用户):

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

然后让所需的单个连接调用此函数为自己打开日志记录。