Как регистрировать запросы PostgreSQL? - PullRequest
338 голосов
/ 06 апреля 2009

Как включить ведение журнала всего 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.

Есть идеи?

Ответы [ 8 ]

423 голосов
/ 06 апреля 2009

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


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

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

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

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

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

  1. #log_directory = 'pg_log' до log_directory = 'pg_log'

  2. #log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' до log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'

  3. #log_statement = 'none' до log_statement = 'all'

  4. #logging_collector = off до logging_collector = on

  5. Дополнительно : SELECT set_config('log_statement', 'all', true);

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

  7. Пожарный запрос в postgresql select 2+2

  8. Найти текущий логин /var/lib/pgsql/9.2/data/pg_log/

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

Спасибо, @ Paul, @ Джаррет Харди, @ Золтан, @Rix Beck, @Latif Premani

37 голосов
/ 16 мая 2013
SELECT set_config('log_statement', 'all', true);

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

34 голосов
/ 11 июля 2014

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

log_directory = 'pg_log'                    
log_filename = 'postgresql-dateformat.log'
log_statement = 'all'
logging_collector = on
24 голосов
/ 06 апреля 2009
20 голосов
/ 08 августа 2017

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

ALTER DATABASE your_database_name
SET log_statement = 'all';

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

20 голосов
/ 08 апреля 2010

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

log_line_prefix = '%t %c %u ' # time sessionid user
log_statement = 'all'
10 голосов
/ 17 сентября 2013

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

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