每个用户日志设置

来自 PostgreSQL 维基
跳转到导航跳转到搜索

我们可以在每个用户的基础上设置 log_statement 吗?

例如

ALTER USER [user] SET log_statement TO [none|ddl|mod|all];

目标是覆盖 postgresql.conf 中的全局设置;例如,我们需要记录一组用户的全部活动,但不能记录其他用户的活动,并且不想让我们的日志变得过大。

与一些开发人员的讨论和文档暗示我们可以这样做

不幸的是,我们无法让它工作。以下是测试概述。

所以

  • 这是否是一个错误,因为它应该被允许,但没有被允许?
  • 或者,这是预期的行为,因为它是一个“会话”设置,并不影响设置已更改的非特权用户(因为这不是该用户的会话)?
  • 或者,这是标签完成中的错误?(如果这是不允许的,最好给出错误。)
  • 或者文档不完整?
  • 或者我们只是做错了?

其他问题

  • 如果这有效,我们如何找出哪个用户具有哪个设置?
  • 还有其他*可以*工作的设置吗?

初始测试

以下是我作为非特权用户运行的 SQL

-- this should appear under 'ddl' level
CREATE TABLE testy
(id serial primary key,
name text);
-- this should only appear under 'mod' level
INSERT INTO testy (name)
VALUES
('gabrielle'),
('selena'),
('dan');
-- this should only appear under 'all' level
SELECT * FROM testy;
-- this should only appear under 'mod' level
DROP TABLE testy;

测试 1

log_statement = 'mod' #in postgresql.conf
postgres=# ALTER USER gabrielle SET log_statement TO 'ddl';
LOG:  statement: ALTER USER gabrielle SET log_statement TO 'ddl';
ALTER ROLE

这让我相信我成功设置了此参数。

但是,用户的 ddl 和 mod 语句被记录了;我期望只有 ddl 语句被记录。将用户的 log_statement 设置为 none 和 all 的结果相同。

测试 2

log_statement = 'all' #in postgresql.conf

这一次,所有用户的语句都被记录了,无论用户的 log_statement 设置为什么。换句话说,与之前的结果相同。

根据 Rob Treat 的要求,其他需要检查的事情:

gabrielle=> ALTER USER gabrielle SET log_statement TO 'mod';
ERROR:  permission denied to set parameter "log_statement"

所以,用户不能为自己更改它。但是,标签完成暗示这是一个选项。:)