Как включить ведение журнала всего 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.
Любые идеи?
postgresql
logging
Павел
источник
источник
logging_collector = on
systemctl restart postgresql
может фактически не перезапускаться настроенная вами служба PostgreSQL (пока я не понимаю, почему), поэтому изменения в файле конфигурации не будут применены. Это безопаснее использоватьpg_ctl
(илиpg_ctlcluster
на Debian).systemctl reload postgresql
,systemctl restart postgresql
,service postgresql reload
иservice postgresql restart
все изменения конфигурации делает эффективной.Ответы:
В вашем
data/postgresql.conf
файле изменитеlog_statement
настройку на'all'
.редактировать
Глядя на вашу новую информацию, я бы сказал, что может быть несколько других параметров для проверки:
log_destination
переменнуюlogging_collector
log_directory
каталог уже существует внутриdata
каталога и что пользователь postgres может писать в него.источник
pg_ctl reload
ALTER SYSTEM
командой суперпользователь может устанавливать параметры GUC из SQL.data
в ответе каталог не является его буквальным именем; он относится к пути, назначенномуdata_directory
переменной в файле конфигурации PostgreSQL. В Debian и Ubuntu GNU / Linux этот файл обычно находится по адресу/etc/postgresql/$v/main/postgresql.conf
, где$v
находится версия сервера. Кроме того, в вышеупомянутых системах, когдаlog_destination = 'stderr'
вывод записывается/var/log/postgresql/postgresql-$v-main.log
, где$v
находится версия сервера (а не в какое-то место внутриdata_directory
).Отредактируйте
/etc/postgresql/9.3/main/postgresql.conf
и измените строки следующим образом.Примечание : если вы не нашли
postgresql.conf
файл, просто введите$locate postgresql.conf
в терминале#log_directory = 'pg_log'
вlog_directory = 'pg_log'
#log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
вlog_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
#log_statement = 'none'
вlog_statement = 'all'
#logging_collector = off
в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-скрипт, который удалит журналы и перезапустит сервер postgresql.
Спасибо, Пол, @ Джаррет Харди, @ Золтан, @Rix Бек, @Latif Премани
источник
# log_destination = 'stderr'
файл конфигурации, прежде чем это сработало.log_filename = 'postgresql-%d.log'
и нет, он не будет перезаписываться после каждого перезапуска, он будет добавляться для каждого дня и перезаписываться каждый месяц. Конечно, есть разные дни в зависимости от месяца 28,29,30,31 - но вы поняли идею.С соответствующим правом пользователя может использовать запрос выше после подключения. Это повлияет на ведение журнала до окончания сеанса.
источник
SET log_statement = 'all'
или (для уровня транзакции)SET LOCAL log_statement = 'all'
. Вы также можете быть заинтересованы вclient_min_messages
иlog_min_messages
настройке.permission denied to set parameter "log_statement"
так как мой пользователь не является суперпользователем.GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTION function_name ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
Вам также необходимо добавить эти строки в PostgreSQL и перезапустить сервер:
источник
Required to be on for csvlogs
, что эта опция заключается в том, чтобы регистрировать выходные данные запросов, а не только операторы, но это не так.К вашему сведению: другие решения будут регистрировать операторы только из базы данных по умолчанию - обычно
postgres
- для регистрации других; начать с их решения; тогда:Ссылка: https://serverfault.com/a/376888 /
log_statement
источник
Установите
log_statement
наall
:Отчет об ошибках и ведение журнала - log_statement
источник
+1 к ответам выше. Я использую следующий конфиг
источник
Просто чтобы получить более подробную информацию о 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
достаточно и не прерывает соединения. Не уверен, что этот ответ добавляет что-то к тем, кто уже здесь.Вы также должны установить этот параметр для регистрации каждого оператора:
источник
Я пытался установить
log_statement
в некотором конфигурационном файле postgres, но на самом деле этот файл не был прочитан нашими postgres.Я подтвердил, что с помощью запроса:
Я использую этот способ https://stackoverflow.com/a/41912295/2294168
источник