регистрировать только пользовательские запросы в Postgres - PullRequest
5 голосов
/ 16 сентября 2009

Я включил регистрацию в своей базе данных Postgres (работает на Ubuntu 32 бита) и хотел бы регистрировать только те запросы, которые выполняются пользовательскими приложениями. Я настроил postgres следующим образом:

log_destination = 'syslog'
syslog_facility = 'L*emphasized text*OCAL0'
syslog_ident = 'postgres'
log_min_messages = notice
log_min_duration_statement = 0
log_duration = off
log_line_prefix = 'user=%u,db=%d '
log_statement = 'none'

В syslog.conf Я настроил для каждого журнала, сделанного для local0, быть перенаправленным на /var/log/pgsql.

Однако Postgres регистрирует множество запросов, которые мне не нужны, например:

WHEN typbasetype=0 THEN oid else typbasetype END AS
Sep 16 12:22:28 or-ubuntu postgres[14086]: [11-2]  basetype
Sep 16 12:22:28 or-ubuntu postgres[14086]: [11-3] ^I  FROM pg_type WHERE oid=1043
Sep 16 12:22:28 or-ubuntu postgres[14086]: [12-1] user=postgres,db=prueba LOG:  duración: 0.361 ms sentencia: SELECT format_type(oid,-1) as typname FROM pg_type WHERE oid = 2950
Sep 16 12:22:28 or-ubuntu postgres[14086]: [13-1] user=postgres,db=prueba LOG:  duración: 0.348 ms sentencia: SELECT CASE WHEN typbasetype=0 THEN oid else typbasetype END AS
Sep 16 12:22:28 or-ubuntu postgres[14086]: [13-2]  basetype
Sep 16 12:22:28 or-ubuntu postgres[14086]: [13-3] ^I  FROM pg_type WHERE oid=2950
Sep 16 12:22:28 or-ubuntu postgres[14086]: [14-1] user=postgres,db=prueba LOG:  duración: 0.451 ms sentencia: SELECT format_type(oid,104) as typname FROM pg_type WHERE oid =
Sep 16 12:22:28 or-ubuntu postgres[14086]: [14-2]  1043
Sep 16 12:22:28 or-ubuntu postgres[14086]: [15-1] user=postgres,db=prueba LOG:  duración: 0.353 ms sentencia: SELECT CASE WHEN typbasetype=0 THEN oid else typbasetype END AS
Sep 16 12:22:28 or-ubuntu postgres[14086]: [15-2]  basetype
Sep 16 12:22:28 or-ubuntu postgres[14086]: [15-3] ^I  FROM pg_type WHERE oid=1043

Есть ли способ предотвратить регистрацию этих строк?

Заранее спасибо

Diego

Ответы [ 2 ]

5 голосов
/ 16 сентября 2009

Если ваши приложения используют свои собственные роли (как они должны), вы можете изменить соответствующие настройки для этих ролей только с помощью «ALTER ROLE» :

ALTER ROLE <account> SET log_statement = 'all';

(или "log_min_duration_statement = 0", как в вашей конфигурации).

0 голосов
/ 16 сентября 2009

Нет, с точки зрения сервера PostgreSQL все запросы одинаковы. Они приходят от какого-то клиента, и у сервера нет возможности узнать, что вас интересует.

Возможно, вам лучше пост-обработать ваши файлы журналов - возможно, это так же просто, как "grep" для них?

(я предполагаю, что вы хотите некоторые запросов в журнал - если нет, вам нужно установить log_min_duration_statement в -1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...