Как регистрировать запросы PostgreSQL?

Как включить ведение журнала всего SQL, выполняемого PostgreSQL 8.3?

Отредактировано (подробнее) Я изменил эти строки:

log_directory = 'pg_log'                    
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_statement = 'all'

И перезапустите службу PostgreSQL... но журнал не был создан... Я использую Windows Server 2003.

Любые идеи?

Ответ 1

В файле data/postgresql.conf измените настройку log_statement на 'all'.


редактировать

Глядя на вашу новую информацию, я бы сказал, что может быть несколько других настроек для проверки:

  • убедитесь, что вы log_destination переменную log_destination
  • убедитесь, что вы logging_collector
  • также убедитесь, что каталог log_directory уже существует внутри каталога data и что пользователь postgres может писать в него.

Ответ 2

Отредактируйте /etc/postgresql/9.3/main/postgresql.conf и измените строки следующим образом.

Примечание. Если вы не нашли файл postgresql.conf, просто введите $locate postgresql.conf в терминал

  • #log_directory = 'pg_log' to log_directory = 'pg_log'

  • #log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' to log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'

  • #log_statement = 'none' to log_statement = 'all'

  • #logging_collector = off to logging_collector = on

  • Необязательный: SELECT set_config('log_statement', 'all', true);

  • sudo /etc/init.d/postgresql restart или sudo service postgresql restart

  • Запрос на пожар в postgresql select 2+2

  • Найти текущий журнал /var/lib/pgsql/9.2/data/pg_log/

Файлы журналов, как правило, растут много времени и могут убить вашу машину. Для вашей безопасности напишите bash script, который удалит журналы и перезапустит сервер postgresql.

Спасибо @paul, @Jarret Hardie, @Zoltán, @Rix Beck, @Latif Premani

Ответ 3

SELECT set_config('log_statement', 'all', true);

С соответствующим правом пользователя можно использовать указанный выше запрос после подключения. Это повлияет на регистрацию до окончания сеанса.

Ответ 4

Вам также необходимо добавить эти строки в PostgreSQL и перезапустить сервер:

log_directory = 'pg_log'                    
log_filename = 'postgresql-dateformat.log'
log_statement = 'all'
logging_collector = on

Ответ 6

FYI: другие решения будут только регистрировать операторы из базы данных по умолчанию, обычно postgres - для записи других; начните с их решения; то:

ALTER DATABASE your_database_name
SET log_statement = 'all';

Ссылка: https://serverfault.com/a/376888/log_statement

Ответ 7

+1 выше ответов. Я использую следующую конфигурацию

log_line_prefix = '%t %c %u ' # time sessionid user
log_statement = 'all'

Ответ 8

Просто для получения более подробной информации о CentOS 6.4 (Red Hat 4.4.7-3), на которой запущена PostgreSQL 9.2, на основе найденных инструкций на этой веб-странице:

  • Установить (раскомментировать) log_statement = 'all' и log_min_error_statement = error в /var/lib/pgsql/9.2/data/postgresql.conf.
  • Перезагрузите конфигурацию PostgreSQL. Для меня это было сделано, запустив /usr/pgsql-9.2/bin/pg_ctl reload -D /var/lib/pgsql/9.2/data/.
  • Найдите сегодня журнал /var/lib/pgsql/9.2/data/pg_log/

Ответ 9

Мне нужно увидеть эти журналы postgres в таблице pg_stats_activity. Возможно ли это? Пожалуйста, помогите.

Ответ 10

Вы также должны установить этот параметр для регистрации каждого оператора:

log_min_duration_statement = 0