• Tom Lane's avatar
    Clean up error cases in psql's COPY TO STDOUT/FROM STDIN code. · b8f00a46
    Tom Lane authored
    Adjust handleCopyOut() to stop trying to write data once it's failed
    one time.  For typical cases such as out-of-disk-space or broken-pipe,
    additional attempts aren't going to do anything but waste time, and
    in any case clean truncation of the output seems like a better behavior
    than randomly dropping blocks in the middle.
    
    Also remove dubious (and misleadingly documented) attempt to force our way
    out of COPY_OUT state if libpq didn't do that.  If we did have a situation
    like that, it'd be a bug in libpq and would be better fixed there, IMO.
    We can hope that commit fa4440f5 took care
    of any such problems, anyway.
    
    Also fix longstanding bug in handleCopyIn(): PQputCopyEnd() only supports
    a non-null errormsg parameter in protocol version 3, and will actively
    fail if one is passed in version 2.  This would've made our attempts
    to get out of COPY_IN state after a failure into infinite loops when
    talking to pre-7.4 servers.
    
    Back-patch the COPY_OUT state change business back to 9.2 where it was
    introduced, and the other two fixes into all supported branches.
    b8f00a46
copy.c 15.7 KB