pgbench: Fail cleanly when finding a COPY result state
authorMichael Paquier <[email protected]>
Fri, 3 Oct 2025 05:04:01 +0000 (14:04 +0900)
committerMichael Paquier <[email protected]>
Fri, 3 Oct 2025 05:04:01 +0000 (14:04 +0900)
commitde6de069d9c6b432a5dfd98b0784ed7f60a793ce
tree137dcb1a63c5caf6ecd03222b3b07cb9804940b8
parent036decbba2af60dfed4afe564689a0475ef844ab
pgbench: Fail cleanly when finding a COPY result state

Currently, pgbench aborts when a COPY response is received in
readCommandResponse().  However, as PQgetResult() returns an empty
result when there is no asynchronous result, through getCopyResult(),
the logic done at the end of readCommandResponse() for the error path
leads to an infinite loop.

This commit forcefully exits the COPY state with PQendcopy() before
moving to the error handler when fiding a COPY state, avoiding the
infinite loop.  The COPY protocol is not supported by pgbench anyway, as
an error is assumed in this case, so giving up is better than having the
tool be stuck forever.  pgbench was interruptible in this state.

A TAP test is added to check that an error happens if trying to use
COPY.

Author: Anthonin Bonnefoy <[email protected]>
Discussion: https://postgr.es/m/CAO6_XqpHyF2m73ifV5a=5jhXxH2chk=XrgefY+eWWPe2Eft3=A@mail.gmail.com
Backpatch-through: 13
src/bin/pgbench/pgbench.c
src/bin/pgbench/t/001_pgbench_with_server.pl