From: | sari(dot)thiele(at)usit(dot)uio(dot)no |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org |
Subject: | BUG #7890: wrong behaviour using pg_rotate_logfile() with parameter log_truncate_on_rotation = on |
Date: | 2013-02-18 12:11:41 |
Message-ID: | E1U7PZN-0000zg-NC@wrigleys.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
The following bug has been logged on the website:
Bug reference: 7890
Logged by: Sari Thiele
Email address: sari(dot)thiele(at)usit(dot)uio(dot)no
PostgreSQL version: 9.1.8
Operating system: Red Hat Enterprise Linux Server release 6.3
Description:
Hi,
I am trying to use the function pg_rotate_logfile() to force a truncate of
the current log file by setting the parameter "log_truncate_on_rotation =
on".
But it looks like that this does not work, like I expected.
System info:
Red Hat Enterprise Linux Server release 6.3 (Santiago)
select version();
version
--------------------------------------------------------------------------------------------------------------
PostgreSQL 9.1.8 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.4.6
20120305 (Red Hat 4.4.6-4), 64-bit
Parameter set-up:
log_filename = 'postgresql-%F_%H.log'
logging_collector = on
log_truncate_on_rotation = on
log_rotation_age = 1h
log_rotation_size = 0
SELECT pg_rotate_logfile();
After the function call, the file is still filled with the previous data.
After my understanding the log file should be emptied (truncated).
-----------
To check if there is something wrong with my set-up, I did some other tests,
too.
1.
log_filename = 'postgresql-%F_%T.log'
logging_collector = on
log_truncate_on_rotation = on
log_rotation_age = 1h
log_rotation_size = 0
SELECT pg_rotate_logfile();
After the function call a new file is generated, because of the logfilename
string (HH:MM:ss).
This is correct.
-------------------------
2.
log_filename = 'postgresql-%M.log'
logging_collector = on
log_truncate_on_rotation = on
log_rotation_age = 10min
log_rotation_size = 0
Here is the file automatically truncated after an hour, because of the file
name. So that works also correct.
----
We checked the source code and it looks like the problem could be here:
src/backend/postmaster/syslogger.c
/*
* Decide whether to overwrite or append. We can overwrite if (a)
* Log_truncate_on_rotation is set, (b) the rotation was triggered by
* elapsed time and not something else, and (c) the computed file name is
* different from what we were previously logging into.
*
* Note: last_file_name should never be NULL here, but if it is, append.
*/
if (time_based_rotation || (size_rotation_for &LOG_DESTINATION_STDERR))
{
if (Log_truncate_on_rotation && time_based_rotation &&
last_file_name != NULL &&
strcmp(filename, last_file_name) != 0) ==> *
fh = logfile_open(filename, "w", true);
else
fh = logfile_open(filename, "a", true);
==> * this checks if the new file name is different from the old one.
In my case it is still the same name and so the new log lines will be
appended to the current file, not truncated like I expected.
I think this is the wrong behaviour, what do you think?
Cheers,
Sari Thiele
Center for Information Technology
University of Oslo, Norway
From | Date | Subject | |
---|---|---|---|
Next Message | Bruce Momjian | 2013-02-18 14:26:54 | Re: BUG #7888: Small issue on wiki page Round time |
Previous Message | Heikki Linnakangas | 2013-02-18 08:57:01 | Re: BUG #7883: "PANIC: WAL contains references to invalid pages" on replica recovery |