• T
    Clean up logging for extended-query-protocol operations, as per my recent · 893632be
    Tom Lane 提交于
    proposal.  Parameter logging works even for binary-format parameters, and
    logging overhead is avoided when disabled.
    
    log_statement = all output for the src/test/examples/testlibpq3.c example
    now looks like
    
    LOG:  statement: execute <unnamed>: SELECT * FROM test1 WHERE t = $1
    DETAIL:  parameters: $1 = 'joe''s place'
    LOG:  statement: execute <unnamed>: SELECT * FROM test1 WHERE i = $1::int4
    DETAIL:  parameters: $1 = '2'
    
    and log_min_duration_statement = 0 results in
    
    LOG:  duration: 2.431 ms  parse <unnamed>: SELECT * FROM test1 WHERE t = $1
    LOG:  duration: 2.335 ms  bind <unnamed> to <unnamed>: SELECT * FROM test1 WHERE t = $1
    DETAIL:  parameters: $1 = 'joe''s place'
    LOG:  duration: 0.394 ms  execute <unnamed>: SELECT * FROM test1 WHERE t = $1
    DETAIL:  parameters: $1 = 'joe''s place'
    LOG:  duration: 1.251 ms  parse <unnamed>: SELECT * FROM test1 WHERE i = $1::int4
    LOG:  duration: 0.566 ms  bind <unnamed> to <unnamed>: SELECT * FROM test1 WHERE i = $1::int4
    DETAIL:  parameters: $1 = '2'
    LOG:  duration: 0.173 ms  execute <unnamed>: SELECT * FROM test1 WHERE i = $1::int4
    DETAIL:  parameters: $1 = '2'
    
    (This example demonstrates the folly of ignoring parse/bind steps for duration
    logging purposes, BTW.)
    
    Along the way, create a less ad-hoc mechanism for determining which commands
    are logged by log_statement = mod and log_statement = ddl.  The former coding
    was actually missing quite a few things that look like ddl to me, and it
    did not handle EXECUTE or extended query protocol correctly at all.
    
    This commit does not do anything about the question of whether log_duration
    should be removed or made less redundant with log_min_duration_statement.
    893632be
prepare.c 21.4 KB