I’m having problem with libpq’s PQexec function hanging on intermittent
connections. After looking around the mailing list, the solution is to use the
asynchronous functions PQsendQuery/PQgetResult and implement your own timeout.
Now the
issue I’m facing is that PQgetResult needs to be called multiple times until
it returns null and then you know it’s done. However, the rest of my
application expects a single PQresult object per query.
So my question is:
- Is there a way to concatenate/join the multiple
PQresults? - Can I somehow use
PQisBusy&PQconsumeInputto wait until all the
results are ready before callingPQgetResult?
credits to Laurenz Albe to who answered this over on the postgresql mailing list.
If you have a single SQL statement, you will get only one
PQresult. You get more than one if you send a query stringwith more than one statement, e.g.
would result in two
PQresults.You can get multiple
PQresultsonly using asynchronouscommand processing; the corresponding PQexec would return
only the PQresult of the last statement executed.
So you can get the same behaviour as
PQexecby discardingall
PQresultsexcept for the last one.