Patch to implement pg_current_logfile() function - Mailing list pgsql-hackers
From | Gilles Darold |
---|---|
Subject | Patch to implement pg_current_logfile() function |
Date | |
Msg-id | 56E05E18.9090703@dalibo.com Whole thread Raw |
Responses |
Re: Patch to implement pg_current_logfile() function
Re: Patch to implement pg_current_logfile() function |
List | pgsql-hackers |
Hi, Here is a patch that is supposed to solve the remaining problem to find the current log file used by the log collector after a rotation. There is lot of external command to try to find this information but it seems useful to have an internal function to retrieve the name of the current log file from the log collector. There is a corresponding item in the TODO list at "Administration" section. The original thread can be reach at the following link http://archives.postgresql.org/pgsql-general/2008-11/msg00418.php The goal is to provide a way to query the log collector subprocess to determine the name of the currently active log file. This patch implements the pg_current_logfile() function that can be used as follow. The function returns NULL when logging_collector is not active and outputs a warning. postgres=# \pset null * postgres=# SELECT pg_current_logfile(); WARNING: current log can not be reported because log collection is not active pg_current_logfile -------------------- * (1 line) So a better query should be: postgres=# SELECT CASE WHEN current_setting('logging_collector')='on' THEN pg_current_logfile() ELSE current_setting('log_destination') END; current_setting ----------------- syslog (1 line) Same query with log collection active and, for example, log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log' postgres=# SELECT CASE WHEN current_setting('logging_collector')='on' THEN pg_current_logfile() ELSE current_setting('log_destination') END; current_setting ----------------------------------------- pg_log/postgresql-2016-03-09_152827.log (1 line) Then after a log rotation: postgres=# SELECT pg_rotate_logfile(); pg_rotate_logfile ------------------- t (1 line) postgres=# select pg_current_logfile(); pg_current_logfile ----------------------------------------- pg_log/postgresql-2016-03-09_152908.log (1 line) I choose to allow the log collector to write his current log file name into the lock file 'postmaster.pid'. This allow simple access to this information through system commands, for example: postgres@W230ST:~$ tail -n1 /usr/local/pgql-devel/data/postmaster.pid pg_log/postgresql-2016-03-09_152908.log Log filename is written at the 8th line position when log collection is active and all other information have been written to lock file. The function pg_current_logfile() use in SQL mode read the lock file to report the information. I don't know if there's any limitation on using postmaster.pid file to do that but it seems to me a bit weird to log this information to an other file. My first attempt was to use a dedicated file and save it to global/pg_current_logfile or pg_stat_tmp/pg_current_logfile but I think it is better to use the postmaster.pid file for that. I also though about a communication protocol or notification with the log collector subprocess to query and retrieve the name of the currently active log file. But obviously, it would be too much work for just this simple function and I can't see any other feature that need such a work. Any though? Should I add this patch to the commit fest? If the use of the postmater.pid file is a problem I can easily modify the patch to use an alternate file. Best regards, -- Gilles Darold Consultant PostgreSQL http://dalibo.com - http://dalibo.org
Attachment
pgsql-hackers by date: