Как включить ведение журнала всего 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.
Любые идеи?
В файле data/postgresql.conf
измените настройку log_statement
на 'all'
.
редактировать
Глядя на вашу новую информацию, я бы сказал, что может быть несколько других настроек для проверки:
log_destination
переменную log_destination
logging_collector
log_directory
уже существует внутри каталога data
и что пользователь postgres может писать в него.pg_ctl reload
Отредактируйте /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
# log_destination = 'stderr'
в файле конфигурации, прежде чем это сработало.
SELECT set_config('log_statement', 'all', true);
С соответствующим правом пользователя можно использовать указанный выше запрос после подключения. Это повлияет на регистрацию до окончания сеанса.
SET log_statement = 'all'
использовать SET log_statement = 'all'
или (для уровня транзакции) SET LOCAL log_statement = 'all'
. Вы также можете быть заинтересованы в настройках client_min_messages
и log_min_messages
.
permission denied to set parameter "log_statement"
так как мой пользователь не является суперпользователем.
Вам также необходимо добавить эти строки в PostgreSQL и перезапустить сервер:
log_directory = 'pg_log'
log_filename = 'postgresql-dateformat.log'
log_statement = 'all'
logging_collector = on
Установите log_statement
в all
:
+1 выше ответов. Я использую следующую конфигурацию
log_line_prefix = '%t %c %u ' # time sessionid user
log_statement = 'all'
FYI: другие решения будут только регистрировать операторы из базы данных по умолчанию, обычно postgres
- для записи других; начните с их решения; то:
ALTER DATABASE your_database_name
SET log_statement = 'all';
Просто для получения более подробной информации о 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
./usr/pgsql-9.2/bin/pg_ctl reload -D /var/lib/pgsql/9.2/data/
./var/lib/pgsql/9.2/data/pg_log/
pg_ctl reload
достаточна и не прерывает соединения. Не уверен, что этот ответ добавляет что-то к тем, кто уже здесь.
Мне нужно увидеть эти журналы postgres в таблице pg_stats_activity. Возможно ли это? Пожалуйста, помогите.
logging_collector = on
systemctl restart postgresql
, что в некоторых дистрибутивах GNU / Linux (например, Debian Jessie)systemctl restart postgresql
может фактически не перезапускать настроенную вами службу PostgreSQL (пока не понимаю, почему), поэтому изменения в файле конфигурации не будут применены. Безопаснее использоватьpg_ctl
(илиpg_ctlcluster
в Debian).