Как регистрировать запросы 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
Ответ 5
Установите log_statement
в all
:
Отчеты об ошибках и протоколирование - log_statement
Ответ 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