Регистрация ошибок и протоколирование

Куда протоколировать

log_destination (string)

QHB поддерживает несколько методов протоколирования сообщений сервера, включая stderr, csvlog и syslog. Значение этого параметра указывается в виде списка желаемых расположений журнала, разделенных запятыми. По умолчанию сообщения сервера протоколируются только в stderr. Этот параметр можно задать только в файле qhb.conf или в командной строке сервера.

Если в log_destination входит csvlog, то записи журнала выводятся в формате CSV (значения, разделенные запятыми), что удобно для загрузки журналов в программы. Подробную информацию см. в подразделе Использование вывода журнала в формате CSV. Для генерации вывода журнала в формате CSV должен быть включен logging_collector.

Если указаны stderr или csvlog, то создается файл current_logfiles для записи местоположения файла (или файлов) журнала, который в данный момент используется сборщиком сообщений, и соответствующего места назначения. Это обеспечивает удобный способ поиска журналов, используемых в данный момент экземпляром сервера. Пример содержимого такого файла:

stderr log/qhb.log
csvlog log/qhb.csv

current_logfiles воссоздается, когда при прокрутке создается новый файл журнала и когда повторно загружается log_destination. Он удаляется, когда в log_destination не включены ни stderr, ни csvlog и когда сборщик сообщений выключен.

Примечание
В большинстве систем Unix потребуется изменить конфигурацию демона syslog, чтобы использовать вариант syslog для log_destination. QHB может протоколировать с помощью syslog-программ с LOCAL0 по LOCAL7 (см. syslog_facility), но на большинстве платформ конфигурация syslog по умолчанию не учитывает сообщения такого типа. Чтобы это работало, понадобится добавить в конфигурацию демона syslog что-то вроде этого:

local0.* /var/log/qhb

logging_collector (boolean)

Этот параметр включает сборщик сообщений, который является фоновым процессом, собирающим сообщения, отправленные в stderr, и перенаправляющим их в файлы журнала. Такой подход зачастую более полезен, чем запись в syslog, поскольку некоторые типы сообщений могут не отображаться в выходных данных syslog. (Один из типичных примеров — сообщения об ошибках динамического компоновщика; другой — сообщения об ошибках в скриптах типа archive_command). Этот параметр можно задать только при запуске сервера.

Примечание
Можно обойтись без сборщика сообщений и просто протоколировать в stderr; сообщения журнала будут отправляться туда, куда направлен поток серверного stderr. Однако этот метод подходит только для небольших объемов протоколирования, поскольку не предоставляет удобного способа ротации файлов журналов. Кроме того, на некоторых платформах выключение сборщика сообщений может привести к потере или искажению выходных данных журнала, так как несколько процессов, одновременно пишущих в один файл журнала, могут перезаписывать сообщения друг друга.

Примечание
Сборщик сообщений спроектирован так, чтобы никогда не терять сообщения. Это означает, что при крайне высокой нагрузке серверные процессы могут быть заблокированы при попытке отправить дополнительные сообщения, если сборщик отстал. В то же время syslog предпочитает удалять сообщения, если не может их записать, то есть в таких случаях часть сообщений может потеряться, но остальная часть системы не будет блокироваться.

log_directory (string)

При включенном logging_collector этот параметр определяет каталог, в котором будут создаваться файлы журнала. Его можно задавать как абсолютный путь или относительный от каталога данных кластера. Этот параметр можно задать только в файле qhb.conf или в командной строке сервера. Значение по умолчанию — log.

log_filename (string)

При включенном logging_collector этот параметр задает имена создаваемых файлов журнала. Значение рассматривается как шаблон функции strftime, поэтому в нем можно использовать спецификаторы % для включения в имена файлов даты и времени. (Обратите внимание, что при наличии зависящих от часового пояса спецификаторов % вычисления будут выполняться в поясе, заданном в параметре log_timezone). Поддерживаемые спецификаторы % аналогичны тем, что перечислены в описании strftime спецификации Open Group. Обратите внимание, что системная функция strftime напрямую не используется, поэтому нестандартные, специфичные для платформы расширения не работают. Значение по умолчанию — qhb-%Y-%m-%d_%H%M%S.log.

Если вы указываете имя файла без спецификаторов, то во избежание заполнения всего диска следует запланировать использование утилиты ротации файлов журналов.

Если в log_destination включен вывод в формате CSV, то к имени файла журнала с меткой времени будет добавлено расширение .csv. (Если log_filename оканчивается на .log, то это расширение заменяется на .csv.)

Этот параметр можно задать только в файле qhb.conf или в командной строке сервера.

log_file_mode (integer)

В системах Unix при включенном logging_collector этот параметр задает права доступа к файлам журнала. Значение параметра должно быть числовым, введенным в формате, принимаемом системными командами chmod и umask. (Для обычного восьмеричного формата число должно начинаться с 0 (ноль).)

Право доступа по умолчанию — 0600, т. е. читать или писать в файлы журнала может только владелец сервера. Другое часто используемое полезное значение — 0640, позволяющее читать файлы членам группы владельца. Однако обратите внимание, что для установки такого значения нужно перенести каталог для хранения файлов журнала (log_directory) за пределы каталога данных кластера. В любом случае неразумно открывать для всех доступ на чтение файлов журналов, поскольку они могут содержать конфиденциальные данные.

Этот параметр можно задать только в файле qhb.conf или в командной строке сервера.

log_rotation_age (integer)

При включенном logging_collector этот параметр определяет максимальное время использования отдельного файла журнала, после которого будет создан новый файл. Если это значение указано без единиц измерения, оно считается заданным в минутах. Значение по умолчанию — 24 часа. При нулевом значении повременное создание новых файлов журнала выключается. Этот параметр можно задать только в файле qhb.conf или в командной строке сервера.

log_rotation_size (integer)

При включенном logging_collector этот параметр определяет максимальный размер отдельного файла журнала. По достижении этого размера будет создан новый файл. Если это значение указано без единиц измерения, оно считается заданным в килобайтах. Значение по умолчанию — 10 мегабайт. При нулевом значении поразмерное создание новых файлов журнала выключается. Этот параметр можно задать только в файле qhb.conf или в командной строке сервера.

log_truncate_on_rotation (boolean)

При включенном logging_collector этот параметр заставит QHB опустошать (перезаписывать) существующие файлы журнала с одинаковым именем, а не дописывать в них. Однако опустошение будет происходить только при открытии нового файла вследствие ротации по времени, а не при запуске сервера или ротации по размеру. При выключенном параметре в любом случае будет происходить добавление записей в уже существующий файл. Например, использование этого параметра в сочетании с log_filename равным qhb-%H.log приведет к генерации 24-часовых файлов журнала, которые будут циклически перезаписываться. Этот параметр можно задать только в файле qhb.conf или в командной строке сервера.

Пример: для хранения файлов журнала в течение 7 дней, по одному файлу на каждый день с именами вида server_log.Mon, server_log.Tue и т. д., и автоматической перезаписью файлов журнала прошлой недели на эту неделю, нужно установить log_filename в server_log.%a, log_truncate_on_rotation в on и log_rotation_age в 1440.

Пример: для хранения файлов журнала в течение 24 часов, по одному файлу на каждый час, но также с возможностью переключения файла раньше этого срока при превышении размера 1 ГБ, нужно установить log_filename в server_log.%H%M, log_truncate_on_rotation в on, log_rotation_age в 60 и log_rotation_size в 1000000. Добавление %M в log_filename позволит при ротации по размеру указать имя файла, отличное от исходного имени файла данного часа.

syslog_facility (enum)

При включенном протоколировании в syslog этот параметр определяет значение «facility» (syslog-программы), которая будет использоваться. Допустимые значения: LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7; значение по умолчанию — LOCAL0. Подробную информацию см. в документации на системный демон syslog. Этот параметр можно задать только в файле qhb.conf или в командной строке сервера.

syslog_ident (string)

При включенном протоколировании в syslog этот параметр определяет имя программы, которое будет использоваться в журналах syslog для идентификации сообщений QHB. Имя по умолчанию — qhb. Этот параметр можно задать только в файле qhb.conf или в командной строке сервера.

syslog_sequence_numbers (boolean)

При включенном протоколировании в syslog и включении этого параметра (по умолчанию), все сообщения будут предваряться последовательно возрастающими номерами (например [2]). Это позволяет обойти подавление повторов «--- последнее сообщение повторилось N раз ---», которое по умолчанию осуществляется во многих реализациях syslog. В более современных реализациях syslog подавление повторных сообщений можно настроить (например, в rsyslog есть директива $RepeatedMsgReduction), так что это может оказаться необязательно. Кроме того, если вам действительно нужно, чтобы повторы подавлялись, этот параметр можно выключить.

Этот параметр можно задать только в файле qhb.conf или в командной строке сервера.

syslog_split_messages (boolean)

При включенном протоколировании в syslog этот параметр определяет способ передачи сообщений. Если этот параметр включен (по умолчанию), сообщения разделяются на строки, а длинные строки разбиваются так, чтобы уложиться в 1024 байта, что является типичным ограничением размера для традиционных реализаций syslog. Когда он выключен, сообщения сервера QHB передаются в службу syslog как есть, и она должна сама корректно справляться с потенциально громоздкими сообщениями.

Если в итоге syslog протоколирует в текстовый файл, результат в любом случае будет одинаковым, и лучше оставить этот параметр включенным, поскольку большинство реализаций syslog либо не могут обрабатывать большие сообщения, либо требуют для этого специальной настройки. Но если в итоге syslog записывает данные в какую-то другую среду, возможно, будет необходимо или более полезно сохранять логическую целостность сообщений.

Этот параметр можно задать только в файле qhb.conf или в командной строке сервера.

event_source (string)

При включенном протоколировании в журнал событий этот параметр определяет имя программы, которое будет использоваться в нем для идентификации сообщений QHB. Имя по умолчанию — qhb. Этот параметр можно задать только в файле qhb.conf или в командной строке сервера.


Когда протоколировать

log_min_messages (enum)

Определяет уровень важности сообщений, записываемых в журнал сервера. Допустимые значения: DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL и PANIC. Каждый из перечисленных уровней включает в себя все уровни, идущие после него. Чем дальше в этом списке уровень сообщения, тем меньше сообщений отправляется в журнал. Значение по умолчанию — WARNING. Обратите внимание, что здесь у LOG другая позиция, нежели в параметре client_min_messages. Только суперпользователи могут изменять этот параметр.

log_min_error_statement (enum)

Определяет, какие команды SQL, вызвавшие ошибку, записываются в журнал сервера. Текущая команда SQL вносится в запись журнала, если сообщение имеет указанный уровень важности или выше. Допустимые значения: DEBUG5, DEBUG4, DEBUG3, DEBUG2, DEBUG1, INFO, NOTICE, WARNING, ERROR, LOG, FATAL и PANIC. По умолчанию установлено ERROR, то есть в журнал будут записываться команды, завершившиеся сообщением с уровнем важности ERROR, LOG, FATAL и PANIC. Чтобы действительно выключить запись команд с ошибками, установите для этого параметра значение PANIC. Только суперпользователи могут изменять этот параметр.

log_min_duration_statement (integer)

Инициирует запись в журнал продолжительности выполнения каждой завершенной команды, если та работала в течение указанного времени или дольше. Например, если установить значение 250ms, в журнал будут записаны все команды SQL, выполняющиеся 250 миллисекунд и дольше. С помощью этого параметра можно отслеживать неоптимизированные запросы в приложениях. Если это значение указано без единиц измерения, оно считается заданным в миллисекундах. При нулевом значении записывается продолжительность выполнения всех команд. Значение -1 (по умолчанию) выключает запись продолжительности выполнения команд. Только суперпользователи могут изменять этот параметр.

Этот параметр переопределяет log_min_duration_sample, то есть запросы с продолжительностью выше значения этого параметра не подвергаются выборке и всегда протоколируются.

Для клиентов, использующих расширенный протокол запросов, будет записываться продолжительность каждой фазы (разбор, связывание и выполнение).

Примечание
При использовании этого параметра совместно с log_statement текст команд, которые записываются вследствие использования log_statement, не будет дублироваться в сообщении о продолжительности выполнения. Если вы не пользуетесь syslog, рекомендуется включить в log_line_prefix идентификатор процесса или сеанса, чтобы с их помощью можно было связать текст команды с сообщением о продолжительности выполнения, которое появится позже.

log_min_duration_sample (integer)

Позволяет сделать выборку по продолжительности завершенных команд, выполнявшихся в течение как минимум указанного промежутка времени. При этом в журнал вносятся такие же записи, как и при включенном log_min_duration_statement, но только для подмножества выполнившихся команд, определенного параметром log_statement_sample_rate. Например, если задать значение 100ms, то для выборки будут отобраны все команды SQL, выполняющиеся 100 мс и дольше. Включение этого параметра может быть полезно, когда трафик слишком высок, чтобы протоколировать все запросы. Если это значение указано без единиц измерения, оно считается заданным в миллисекундах. При нулевом значении производится выборка команд с любой продолжительностью. Значение -1 (по умолчанию) выключает выборку по продолжительности. Только суперпользователи могут изменить этот параметр.

Приоритет этого параметра ниже, чем у log_min_duration_statement, то есть команды с продолжительностью выше значения log_min_duration_statement не подвергаются выборке и всегда протоколируются.

Другие примечания, касающиеся log_min_duration_statement, применимы и к этому параметру.

log_statement_sample_rate (floating point)

Определяет долю команд с продолжительностью, превысившей log_min_duration_sample, которая будет протоколироваться в журнал. Выборка носит стохастический характер, например, значение 0.5 означает, что статистически шанс попадания любой отдельно взятой команды в журнал равен один к двум. Значение по умолчанию — 1.0, то есть протоколируются все выбранные команды. При нулевом значении выключается протоколирование команд из выборки по длительности, так же как при установке в log_min_duration_sample значения -1. Только суперпользователи могут изменять этот параметр.

log_transaction_sample_rate (real)

Задает долю транзакций, команды из которых будут записываться в журнал помимо команд, записываемых по другим причинам. Этот параметр действует на все новые транзакции, независимо от продолжительности выполнения их команд. Выборка носит стохастический характер, например, значение 0.1 означает, что статистически шанс попадания любой отдельно взятой транзакции в журнал равен один к десяти. Этот параметр полезен для создания выборки транзакций. Значение по умолчанию — 0, то есть команды из транзакций дополнительно не записываются. При значении 1 записываются все команды из всех транзакций. Только суперпользователи могут изменять этот параметр.

Примечание
Как и все параметры, управляющие протоколированием команд, этот параметр может значительно увеличить издержки.

В Таблице 2 расшифровываются уровни важности сообщений, используемые в QHB. Также здесь показано, как эти уровни переводятся в системные при отправке выходных данных журнала в syslog.

Таблица 2. Уровни важности сообщений

ВажностьИспользованиеsyslog
DEBUG1..DEBUG5Предоставляет более подробную информацию для разработчиков. Чем больше номер, тем подробнее.DEBUG
INFOПредоставляет неявно запрошенную пользователем информацию, например вывод команды VACUUM VERBOSE.INFO
NOTICEПредоставляет информацию, которая может быть полезна пользователям, например замечание об усечении длинных идентификаторов.NOTICE
WARNINGПредоставляет предупреждения о возможных проблемах, например COMMIT вне блока транзакции.NOTICE
ERRORСообщает об ошибке, из-за которой прервана текущая команда.WARNING
LOGСообщает информацию, интересующую администраторов, например выполнение контрольных точек.INFO
FATALСообщает об ошибке, из-за которой прерван текущий сеанс.ERR
PANICСообщает об ошибке, из-за которой прерваны все сеансы базы данных.CRIT

Что протоколировать

application_name (string)

Параметр application_name может быть любой строкой длиной не более NAMEDATALEN символов (64 символа при стандартной сборке). Обычно устанавливается приложением при подключении к серверу. Значение (имя) будет отображено в представлении pg_stat_activity и включено в записи журнала при использовании формата CSV. Также его можно добавить в записи журнала в обычных форматах посредством параметра log_line_prefix. Значение application_name может содержать только печатные символы ASCII. Прочие символы будут заменены на вопросительные знаки (?).

debug_print_parse (boolean)
debug_print_rewritten (boolean)
debug_print_plan (boolean)

Эти параметры включают вывод различных данных по отладке. При этом выводится результирующее дерево разбора, данные механизма переписывания запросов или план выполнения для каждого выполненного запроса соответственно. Эти сообщения имеют уровень LOG, поэтому по умолчанию они появляются в журнале сервера, но не отправляются клиенту. Это можно изменить, настроив client_min_messages и/или log_min_messages. По умолчанию эти параметры выключены.

debug_pretty_print (boolean)

Этот параметр включает выравнивание сообщений, созданных debug_print_parse, debug_print_rewritten или debug_print_plan. В результате сообщения становятся более удобочитаемыми, но гораздо более длинными, чем при формате «compact», используемом, когда debug_pretty_print выключен. По умолчанию включен.

log_autovacuum_min_duration (integer)

Включает протоколирование в журнал каждого действия, выполняемого автоочисткой, если оно продолжается не менее указанного в параметре времени. При нулевом значении протоколируются все действия автоочистки. Значение -1 (по умолчанию) выключает протоколирование действий автоочистки. Если это значение указано без единиц измерения, оно считается заданным в миллисекундах. Например, если задать значение 250ms, то в журнал будут протоколироваться все операции автоматической очистки и анализа, выполняемые 250 мс и дольше. Кроме того, когда в этом параметре установлено любое значение, отличное от -1, будет протоколироваться сообщение в случае пропуска действия автоочистки вследствие конфликтующей блокировки или параллельно удаленного отношения. Включение этого параметра может быть полезно для отслеживания активности автоочистки. Этот параметр можно задать только в файле qhb.conf или в командной строке сервера; при этом его можно переопределить для отдельных таблиц, изменив их параметры хранения.

log_checkpoints (boolean)

Включает протоколирование выполнения контрольных точек и точек перезапуска сервера. Помимо этого в сообщения включается некоторая статистическая информация, в том числе количество записанных буферов и время, потраченное на их запись. Этот параметр можно задать только в файле qhb.conf или в командной строке сервера. По умолчанию выключен.

log_connections (boolean)

Включает протоколирование всех попыток подключения к серверу, а также успешного завершения аутентификации (при необходимости) и авторизации клиента. Только суперпользователи могут изменять этот параметр, причем только в начале сеанса. Значение по умолчанию — off (выключен).

Примечание
Некоторые программы-клиенты, например psql, осуществляют две попытки подключения, при первой попытке определяя, требуется ли пароль, поэтому дублирование сообщения «connection received» не обязательно указывает на наличие проблемы.

log_disconnections (boolean)

Включает протоколирование всех завершений сеанса. В журнал выводится примерно та же информация, что и с log_connections, плюс продолжительность сеанса. Только суперпользователи могут изменять этот параметр, причем только в начале сеанса. Значение по умолчанию — off (выключен).

log_duration (boolean)

Включает протоколирование продолжительности всех выполненных команд. Значение по умолчанию — off (выключен). Только суперпользователи могут изменять этот параметр.

Для клиентов, использующих расширенный протокол запросов, будет записываться продолжительность каждой фазы (разбор, связывание и выполнение).

Примечание
Разница между включением log_duration и установкой нулевого значения для log_min_duration_statement заключается в том, что при превышении значения log_min_duration_statement протоколируется текст запроса, а при включении этого параметра — нет. Таким образом, если log_duration равен on (включен) и у log_min_duration_statement положительное значение, продолжительность протоколируется для всех команд, но текст запроса добавляется только для команд с продолжительностью, превышающей пороговое значение. Такое поведение может быть полезным при сборе статистики в условиях высокой нагрузки.

log_error_verbosity (enum)

Управляет количеством подробной информации, записываемой в журнал сервера для каждого протоколируемого сообщения. Допустимые значения: TERSE, DEFAULT и VERBOSE, каждое из которых добавляет дополнительные поля к отображаемым сообщениям. С уровнем TERSE из сообщений об ошибке исключаются поля DETAIL, HINT, QUERY и CONTEXT. С VERBOSE в сообщение включается код ошибки SQLSTATE (см. раздел Коды ошибок QHB), а также имя файла с исходным кодом, имя функции и номер строки, которая вызвала ошибку. Только суперпользователи могут изменять этот параметр.

log_hostname (boolean)

По умолчанию в сообщениях журнала подключений отображается только IP-адрес подключившегося хоста. При включении этого параметра дополнительно будет протоколироваться и имя хоста. Обратите внимание, что, в зависимости от настройки разрешения имен вашего хоста, это может привести к значительному снижению производительности. Этот параметр можно задать только в файле qhb.conf или в командной строке сервера.

log_line_prefix (string)

Это строка в стиле функции printf, которая выводится в начале каждой строки журнала. С символов % начинаются «управляющие последовательности», которые заменяются информацией о состоянии, как описано ниже. Нераспознанные последовательности игнорируются. Остальные символы напрямую копируются в строку журнала. Некоторые управляющие последовательности распознаются только сеансовыми процессами и будут игнорироваться фоновыми процессами, например основным процессом сервера. Информацию о состоянии можно выровнять влево или вправо, указав число после % и перед этой строкой. При отрицательном значении информация о состоянии будет дополнена до минимально допустимой ширины пробелами справа, а при положительном — слева. Заполнение может быть полезно для облегчения восприятия человеком файлов журнала.

Этот параметр можно установить только в файле qhb.conf или в командной строке сервера. По умолчанию установлено значение '%m [%p] ', при котором протоколируется метка времени и идентификатор процесса.

ПоследовательностьДействиеТолько для сеанса
%aИмя приложенияда
%uИмя пользователяда
%dИмя базы данныхда
%rИмя удаленного хоста или IP-адрес, а также номер удаленного портада
%hИмя удаленного хоста или IP-адресда
%bТип обслуживающего процессанет
%pИдентификатор процессанет
%PИдентификатор ведущего процесса параллельной группы, если этот процесс является рабочим процессом параллельного запросанет
%tМетка времени без миллисекунднет
%mМетка времени с миллисекундаминет
%nМетка времени с миллисекундами (в виде времени Unix)нет
%iТег команды: тип текущей команды сеансада
%eКод ошибки SQLSTATEнет
%cИдентификатор сеанса: см. ниженет
%lНомер строки журнала для каждого сеанса или процесса, начиная с 1нет
%sМетка времени начала процессанет
%vВиртуальный идентификатор транзакции (backendID/localXID)нет
%xИдентификатор транзакции (0, если не присвоен)нет
%qНе выводит никаких данных, но указывает несеансовым процессам остановиться в этой точке строки; игнорируется сеансовыми процессаминет
%QИдентификатор текущего запроса. Идентификаторы запросов не вычисляются по умолчанию, поэтому в данном поле будет выводиться ноль, если не включен параметр compute_query_id или не настроен сторонний модуль, вычисляющий идентификаторы запросов.да
%%Выводит символ %нет

Тип обслуживающего процесса соответствует столбцу backend_type в представлении pg_stat_activity, но в журнале могут присутствовать и другие типы, которые не показываются в этом представлении.

Последовательность %c выводит квазиуникальный идентификатор сеанса, состоящий из двух 4-байтных шестнадцатеричных чисел (без начальных нулей), разделенных точкой. Числа — это время начала процесса и его идентификатор, поэтому %c также можно использовать как способ экономить место при выводе этих значений. Например, чтобы сгенерировать идентификатор сеанса из pg_stat_activity, используйте этот запрос:

SELECT to_hex(trunc(EXTRACT(EPOCH FROM backend_start))::integer) || '.' ||
     to_hex(pid)
FROM pg_stat_activity;

Совет
При установке непустого значение для log_line_prefix лучше сделать его последним символом пробел, чтобы визуально отделить от остальной части строки журнала. Также можно использовать знаки пунктуации.

Совет
Syslog создает собственную метку времени и информацию об идентификаторе процесса, так что, вероятно, при протоколировании в syslog нет смысла использовать эти управляющие последовательности.

Совет
Последовательность %q полезна при включении информации, доступной только в контексте сеанса (обслуживающего процесса), например имени пользователя или базы данных. Например:
log_line_prefix = '%m [%p] %q%u@%d/%a '

Примечание
Последовательность %Q всегда выдает нулевой идентификатор для строк, выводимых посредством log_statement, поскольку этот параметр генерирует вывод до вычисления этого идентификатора, в том числе и для недопустимых операторов, для которых идентификатор вычислить нельзя.

log_lock_waits (boolean)

Определяет, должно ли создаваться сообщение журнала, когда сеанс ожидает получения блокировки дольше, чем задано в deadlock_timeout. Это помогает определить, не является ли ожидание блокировок причиной низкой производительности. Значение по умолчанию — off (выключен). Только суперпользователи могут изменять этот параметр.

log_recovery_conflict_waits (boolean)

Определяет, должно ли создаваться сообщение журнала, когда процесс запуска ожидает дольше, чем задано в deadlock_timeout для конфликтов восстановления. Это полезно при выяснении, препятствуют ли конфликты восстановления применения WAL.

Значение по умолчанию — off (выключен). Этот параметр можно установить только в файле qhb.conf или в командной строке сервера.

log_parameter_max_length (integer)

При положительном значении значения всех привязанных параметров, выводимые в сообщениях об операторах (кроме регистрации ошибок), усекаются на заданное количество байтов. Ноль выключает протоколирование привязанных параметров в таких сообщениях. Значение -1 (по умолчанию) позволяет выводить привязанные параметры в полном объеме. Если это значение указано без единиц измерения, оно считается заданным в байтах. Только суперпользователи могут изменять этот параметр.

Этот параметр влияет только на сообщения, выводимые в журнал по результатам установки log_statement, log_duration и других связанных с ними параметров. При ненулевых значениях этого параметра возникают некоторые дополнительные издержки, особенно если параметры передаются в двоичной форме, поскольку их нужно преобразовать в текст.

log_parameter_max_length_on_error (integer)

При положительном значении значения всех привязанных параметров, выводимые в сообщениях об ошибках, усекаются на заданное количество байтов. Ноль (по умолчанию) выключает протоколирование привязанных параметров в таких сообщениях. Значение -1 позволяет выводить привязанные параметры в полном объеме. Если это значение указано без единиц измерения, оно считается заданным в байтах.

При ненулевых значениях этого параметра возникают некоторые дополнительные издержки, поскольку QHB придется сохранять в памяти текстовые представления значений параметров при запуске всех операторов, независимо от того, произойдет ли в итоге ошибка. Издержки возрастают, когда привязанные параметры передаются не в текстовой, а в двоичной форме, поскольку в последнем случае требуется преобразование данных, тогда как в первом достаточно только скопировать строку.

log_statement (enum)

Управляет тем, какие команды SQL протоколируются в журнал. Допустимые значения: none (выключен), ddl, mod и all (все команды). В режиме ddl протоколируются все команды определения данных, такие как CREATE, ALTER и DROP. В режиме mod протоколируются все команды ddl, а также команды, изменяющие данные, такие как INSERT, UPDATE, DELETE, TRUNCATE и COPY FROM. Команды PREPARE, EXECUTE и EXPLAIN ANALYZE тоже протоколируются, если содержащие их команды имеют соответствующий тип. Для клиентов, использующих расширенный протокол запросов, запись в журнал происходит на фазе выполнения и содержит значения привязанных параметров (с дублированием всех имеющихся апострофов).

Значение по умолчанию — none. Только суперпользователи могут изменять этот параметр.

Примечание
Команды, содержащие простые синтаксические ошибки, не протоколируются даже при log_statement = all, поскольку сообщение журнала создается только после выполнения стандартного разбора для определения типа команды. В случае расширенного протокола запросов этот параметр также не записывает команды, завершившиеся ошибкой до фазы выполнения (т. е. во время разбора или планирования запроса). Для записи таких команд установите параметр log_min_error_statement в значение ERROR (или ниже).

log_replication_commands (boolean)

Включает протоколирование всех команд репликации в журнал сервера. Дополнительную информацию о командах репликации см. в разделе Протокол потоковой репликации. Значение по умолчанию — off (выключен). Только суперпользователи могут изменять этот параметр.

log_temp_files (integer)

Управляет протоколированием имен и размеров временных файлов. Временные файлы могут создаваться для сортировки, хэширования и временного хранения результатов запросов. Если этот параметр включен, запись журнала создается для каждого временного файла при его удалении. При нулевом значении записывается информация обо всех временных файлах, а при положительных — только о тех, размер которых не меньше заданной величины. Если это значение указано без единиц измерения, оно считается заданным в килобайтах. Значение по умолчанию — -1, то есть такое протоколирование выключено. Только суперпользователи могут изменять этот параметр.

log_timezone (string)

Задает часовой пояс, используемый для меток времени при записи в журнал сервера. В отличие от TimeZone, это значение одинаково для всех баз данных кластера, поэтому в сообщениях от всех сеансов метки времени будут согласованы. Встроенное значение по умолчанию — GMT, но обычно оно переопределяется в qhb.conf; qhb_bootstrap установит там значение, соответствующее системной среде. Дополнительную информацию см. в подразделе Часовые пояса. Этот параметр можно задать только в файле qhb.conf или в командной строке сервера.


Использование вывода журнала в формате CSV

Добавление csvlog в список log_destination обеспечивает удобный способ импорта файлов журнала в таблицу базы данных. Этот параметр генерирует строки журнала в формате значений, разделенных запятыми (формат CSV), со следующими столбцами: метка времени с миллисекундами; имя пользователя; имя базы данных; идентификатор процесса; хост клиента:номер порта; идентификатор сеанса; номер строки для каждого сеанса; тег команды; время начала сеанса; виртуальный идентификатор транзакции; обычный идентификатор транзакции; уровень важности ошибки; код ошибки SQLSTATE; сообщение об ошибке; подробности к сообщению об ошибке; подсказка; внутренний запрос, который привел к ошибке (если есть); номер символа внутреннего запроса, где произошла ошибка; контекст ошибки; пользовательский запрос, который привел к ошибке (если есть и включен log_min_error_statement); номер символа в пользовательском запросе, где произошла ошибка; расположение ошибки в исходном коде QHB (если в log_error_verbosity задано verbose); имя приложения; тип обслуживающего процесса; идентификатор ведущего процесса параллельной группы и идентификатор запроса. Пример определения таблицы для хранения вывода журнала в формате CSV:

CREATE TABLE qhb_log
(
  log_time timestamp(3) with time zone,
  user_name text,
  database_name text,
  process_id integer,
  connection_from text,
  session_id text,
  session_line_num bigint,
  command_tag text,
  session_start_time timestamp with time zone,
  virtual_transaction_id text,
  transaction_id bigint,
  error_severity text,
  sql_state_code text,
  message text,
  detail text,
  hint text,
  internal_query text,
  internal_query_pos integer,
  context text,
  query text,
  query_pos integer,
  location text,
  application_name text,
  backend_type text,
  leader_pid integer,
  query_id bigint,
  PRIMARY KEY (session_id, session_line_num)
);

Для импорта файл журнала в такую таблицу используйте команду COPY FROM:

COPY qhb_log FROM '/full/path/to/logfile.csv' WITH csv;

Кроме того, к этому файлу можно обратиться как к сторонней таблице, воспользовавшись поставляемым модулем file_fdw.

Для упрощения импорта файлов журналов в формате CSV необходимо сделать следующее:

  1. Установите для log_filename и log_rotation_age значения, обеспечивающие согласованную и предсказуемую схему именования файлов журнала. Это позволит вам предугадать, каким будет имя файла, и узнать, когда конкретный файл журнала будет завершен и, следовательно, готов к импорту.

  2. Установите для log_rotation_size значение 0, чтобы выключить поразмерную ротацию файлов, поскольку это затрудняет прогнозирование имени файла журнала.

  3. Установите для log_truncate_on_rotation значение on, чтобы старые данные журнала не смешивались с новыми в одном файле.

  4. Приведенное выше определение таблицы содержит спецификацию первичного ключа. Это способствует предотвращению случайного повторного импорта информации. Команда COPY фиксирует все импортируемые данные за один раз, поэтому любая ошибка приведет к сбою всего импорта. Если сначала импортировать неполный файл журнала, а затем снова импортировать его после заполнения, нарушение первичного ключа приведет к сбою импорта. Поэтому, прежде чем импортировать, дождитесь завершения записи и закрытия журнала. Эта процедура также защитит от случайного импорта неполной (частично написанной) строки, что также приведет к сбою команды COPY.


Заголовок процесса

Эти параметры определяют, как изменяются заголовки процессов сервера. Заголовки процессов обычно просматриваются с помощью таких программ, как ps. Дополнительную информацию см. в разделе Стандартные инструменты Unix.

cluster_name (string)

Задает имя, которое идентифицирует этот кластер баз данных (экземпляр сервера) для различных целей. Имя кластера появляется в заголовке у всех процессов сервера в этом кластере. Более того, это имя является именем приложения по умолчанию при подключении резервного сервера (см. synchronous_standby_names).

Это имя может быть любой строкой длиной не более NAMEDATALEN символов (64 символа в стандартной сборке). В значении cluster_name можно использовать только печатные символы ASCII. Все остальные символы будут заменены на вопросительные знаки (?). Если для этого параметра задана пустая строка '' (по умолчанию), то никакое имя не отображается. Этот параметр можно задать только при запуске сервера.

update_process_title (boolean)

Позволяет изменять заголовок процесса каждый раз, когда сервер получает новую команду SQL. На большинстве платформ этот параметр по умолчанию имеет значение on (включен). Только суперпользователи могут изменять этот параметр.