Yes, if we cannot find a perfect solution, we need to wait. Actually, the customer need a unified interface to access the status of database, so we implement it.
------------------ Jerry Yu https://github.com/scarbrofair ------------------ Original ------------------ From: "Robert Haas";<robertmh...@gmail.com>; Date: Fri, Feb 26, 2016 07:33 PM To: "Armor"<yupengst...@qq.com>; Cc: "Tom Lane"<t...@sss.pgh.pa.us>; "Euler Taveira"<eu...@timbira.com.br>; "Alvaro Herrera"<alvhe...@2ndquadrant.com>; "pgsql-hackers"<email@example.com>; Subject: Re: [HACKERS] get current log file On Fri, Feb 26, 2016 at 8:31 AM, Armor <yupengst...@qq.com> wrote: > I think I know what you are concerned about. May be I did not explain my > solution very clearly. > (i) Using a variable named last_syslogger_file_time replace > first_syslogger_file_time in syslogger.c. When postmaster initialize logger > process, last_syslogger_file_time will be assign the time stamp when > logger start, then fork the child process for logger. Later logger will > create a log file based on last_syslogger_file_time . And > last_syslogger_file_time in the postmaster process will be inherited by > other auxiliary processes > (ii) when pgstat process initialize, it will read last_syslogger_file_time > from pg stat file of last time (because pgstat process will write it to pg > stat file). And then pgstat process will get last_syslogger_file_time > inherit from postmaster, if this version of last_syslogger_file_time is > larger then that read from the stat file, it means logger create a new log > file so use it as the latest value; else means pgstat process crashed > before, so it need to use the value from stat file as the latest. > (iii) when logger rotate a log file, it will assign time stamp to > last_syslogger_file_time and send it to pg_stat process. And pg_stat > process will write last_syslogger_file_time to stat file so can be read by > other backends. > (iiii) Adding a stat function named pg_stat_get_log_file_name, when user > call it, it will read last_syslogger_file_time from stat file and construct > the log file name based on log file name format and > last_syslogger_file_time, return the log file name eventually. > > However, there is a risk for this solution: when logger create a new log > file and then try to send new last_syslogger_file_time to pg_stat process, > and pg_stat process crash at this moment, so the new pg_stat process cannot > get the latest last_syslogger_file_time. However, I think this case is a > corner case. I don't think we're going to accept this feature if it might fail in corner cases. And that design seems awfully complex. The obvious way to implement this, to me at least, seems to be for the syslogger to write a file someplace in the data directory containing the name of the current log file. When it switches log files, it rewrites that file. When you want to know what the current logfile is, you read that file. But there's one thing I'm slightly baffled about: why would you actually need this? I mean, it seems like a good idea to set log_filename to a pattern that makes the name of the current logfile pretty well predictable. If not, maybe you should just fix that. Also, if not on Windows, if you do get confused about which logfile is active, you could just use lsof on the log_directory to figure out which file the syslogger has open. I just can't really remember having a problem with this, and I'm wondering why someone would. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company