libpq: How to cancel a COPY ... TO statement?

Started by Daniel Freyover 4 years ago2 messagesgeneral
Jump to latest
#1Daniel Frey
d.frey@gmx.de

Hi,

after sending a COPY ... TO statement with PQsendQuery(), how can I cancel it properly?

I tried using PQcancel(), but it seems to have no effect. Calling PQgetCopyData() or PQgetResult() afterwards does not go into a failure state. And I don't want to call PQgetCopyData() until it returns -1, as this might be a lot of data being read from the server that I don't need.

BR, Daniel

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Daniel Frey (#1)
Re: libpq: How to cancel a COPY ... TO statement?

Daniel Frey <d.frey@gmx.de> writes:

after sending a COPY ... TO statement with PQsendQuery(), how can I cancel it properly?

I tried using PQcancel(),

That's the correct way.

but it seems to have no effect. Calling PQgetCopyData() or PQgetResult() afterwards does not go into a failure state. And I don't want to call PQgetCopyData() until it returns -1, as this might be a lot of data being read from the server that I don't need.

You can't expect instantaneous response to a cancel. For one thing, the
server might have already stuffed a good deal of data down the pipe.
You should keep pulling (and discarding) data until you get the end
or error response.

regards, tom lane