• Tom Lane's avatar
    Make syslogger more robust against failures in opening CSV log files. · bff84a54
    Tom Lane authored
    The previous coding figured it'd be good enough to postpone opening
    the first CSV log file until we got a message we needed to write there.
    This is unsafe, though, because if the open fails we end up in infinite
    recursion trying to report the failure.  Instead make the CSV log file
    management code look as nearly as possible like the longstanding logic
    for the stderr log file.  In particular, open it immediately at postmaster
    startup (if enabled), or when we get a SIGHUP in which we find that
    log_destination has been changed to enable CSV logging.
    
    It seems OK to fail if a postmaster-start-time open attempt fails, as
    we've long done for the stderr log file.  But we can't die if we fail
    to open a CSV log file during SIGHUP, so we're still left with a problem.
    In that case, write any output meant for the CSV log file to the stderr
    log file.  (This will also cover race-condition cases in which backends
    send CSV log data before or after we have the CSV log file open.)
    
    This patch also fixes an ancient oversight that, if CSV logging was
    turned off during a SIGHUP, we never actually closed the last CSV
    log file.
    
    In passing, remember to reset whereToSendOutput = DestNone during syslogger
    start, since (unlike all other postmaster children) it's forked before the
    postmaster has done that.  This made for a platform-dependent difference
    in error reporting behavior between the syslogger and other children:
    except on Windows, it'd report problems to the original postmaster stderr
    as well as the normal error log file(s).  It's barely possible that that
    was intentional at some point; but it doesn't seem likely to be desirable
    in production, and the platform dependency definitely isn't desirable.
    
    Per report from Alexander Kukushkin.  It's been like this for a long time,
    so back-patch to all supported branches.
    
    Discussion: https://postgr.es/m/CAFh8B==iLUD_gqC-dAENS0V+kVrCeGiKujtKqSQ7++S-caaChw@mail.gmail.com
    bff84a54
syslogger.c 40.5 KB