【问题标题】:Loging activity for one user on specific database in Postgres在 Postgres 中的特定数据库上记录一个用户的活动
【发布时间】:2017-08-02 12:01:46
【问题描述】:

我需要记录数据库上某些特定用户的所有活动。我已经使用ALTER ROLE username SET log_statement TO 'all'; 设置了日志记录,并且日志记录工作正常,来自用户的所有查询都被记录下来。问题是,对于这个用户从 psql 和 pgAdmin 等客户端对 Postgres 内部模式 (pg_catalog) 的查询也会被记录。我在日志中有一堆带有SELECT pg_catalog.quote_ident(n.nspname) || '.' || pg_catalog.quote_ident(c.relname).... 的行对我没用。更糟糕的是,这些查询在日志中不止一行,因此不容易过滤掉。

是否有可能以某种方式将日志记录限制在一个特定的数据库或模式中,而不包括对其他模式(如 pg_catalog)的查询?

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    我不知道 postgres 中的标准日志记录实用程序是否有该选项(我的猜测是没有)。但也许值得一看 pgaudit 的 postgres 外部库。

    模块 pgadmin 旨在生成审计日志,但它使用标准的 postgres 日志工具。您可以调整几个参数来自定义日志,它有一个我认为非常适合您的用例的特定参数。来自documentation

    pgaudit.log_catalog

    指定在所有情况下都应启用会话日志记录 语句中的关系在 pg_catalog 中。禁用此设置 将减少来自 psql 和 PgAdmin 等工具的日志中的噪音 大量查询目录。

    默认开启。

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

      将您的日志记录格式从文本更改为 csv (log_destination=csvlog) — 然后您可以将数据导入数据库,然后过滤掉您不感兴趣的查询:
      Using CSV-Format Log Output

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-06
        • 2014-05-31
        • 1970-01-01
        • 2013-07-14
        相关资源
        最近更新 更多