• Tom Lane's avatar
    Clean up parsing of synchronous_standby_names GUC variable. · 4c804fbd
    Tom Lane authored
    Commit 989be081 added a flex/bison lexer/parser to interpret
    synchronous_standby_names.  It was done in a pretty crufty way, though,
    making assorted end-use sites responsible for calling the parser at the
    right times.  That was not only vulnerable to errors of omission, but made
    it possible that lexer/parser errors occur at very undesirable times,
    and created memory leakages even if there was no error.
    
    Instead, perform the parsing once during check_synchronous_standby_names
    and let guc.c manage the resulting data.  To do that, we have to flatten
    the parsed representation into a single hunk of malloc'd memory, but that
    is not very hard.
    
    While at it, work a little harder on making useful error reports for
    parsing problems; the previous code felt that "synchronous_standby_names
    parser returned 1" was an appropriate user-facing error message.  (To
    be fair, it did also log a syntax error message, but separately from the
    GUC problem report, which is at best confusing.)  It had some outright
    bugs in the face of invalid input, too.
    
    I (tgl) also concluded that we need to restrict unquoted names in
    synchronous_standby_names to be just SQL identifiers.  The previous coding
    would accept darn near anything, which (1) makes the quoting convention
    both nearly-unnecessary and formally ambiguous, (2) makes it very hard to
    understand what is a syntax error and what is a creative interpretation of
    the input as a standby name, and (3) makes it impossible to further extend
    the syntax in future without a compatibility break.  I presume that we're
    intending future extensions of the syntax, else this parsing infrastructure
    is massive overkill, so (3) is an important objection.  Since we've taken
    a compatibility hit for non-identifier names with this change anyway, we
    might as well lock things down now and insist that users use double quotes
    for standby names that aren't identifiers.
    
    Kyotaro Horiguchi and Tom Lane
    4c804fbd
config.sgml 340 KB