• Alvaro Herrera's avatar
    Fix bogus completion tag usage in walsender · 07082b08
    Alvaro Herrera authored
    Since commit fd5942c1 (2012, 9.3-era), walsender has been sending
    completion tags for certain replication commands twice -- and they're
    not even consistent.  Apparently neither libpq nor JDBC have a problem
    with it, but it's not kosher.  Fix by remove the EndCommand() call in
    the common code path for them all, and inserting specific calls to
    EndReplicationCommand() specifically in those places where it's needed.
    
    EndReplicationCommand() is a new simple function to send the completion
    tag for replication commands.  Do this instead of sending a generic
    SELECT completion tag for them all, which was also pretty bogus (if
    innocuous).  While at it, change StartReplication() to use
    EndReplicationCommand() instead of pg_puttextmessage().
    
    In commit 2f966131, I failed to realize that replication commands
    are not close-enough kin of regular SQL commands, so the
    DROP_REPLICATION_SLOT tag I added is undeserved and a type pun.  Take it
    out.
    
    Backpatch to 13, where the latter commit appeared.  The duplicate tag
    has been sent since 9.3, but since nothing is broken, it doesn't seem
    worth fixing.
    
    Per complaints from Tom Lane.
    
    Discussion: https://postgr.es/m/1347966.1600195735@sss.pgh.pa.us
    07082b08
walsender.c 103 KB