The following bug has been logged on the website: Bug reference: 7890 Logged by: Sari Thiele Email address: sari.thi...@usit.uio.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 -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs