]> granicus.if.org Git - postgresql/commit
Improve connection-failure error handling in contrib/postgres_fdw.
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 4 Feb 2014 02:30:02 +0000 (21:30 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 4 Feb 2014 02:30:20 +0000 (21:30 -0500)
commit00d4f2af8bd6a1b9db2f676cc76b64d98ace99fb
tree6f420eb8075c6084f177fe6ffae3d0d2d505e8c9
parent489e6ac5a1a4ca7e4ca7683a86ccd8a5d5e3eb59
Improve connection-failure error handling in contrib/postgres_fdw.

postgres_fdw tended to say "unknown error" if it tried to execute a command
on an already-dead connection, because some paths in libpq just return a
null PGresult for such cases.  Out-of-memory might result in that, too.
To fix, pass the PGconn to pgfdw_report_error, and look at its
PQerrorMessage() string if we can't get anything out of the PGresult.

Also, fix the transaction-exit logic to reliably drop a dead connection.
It was attempting to do that already, but it assumed that only connection
cache entries with xact_depth > 0 needed to be examined.  The folly in that
is that if we fail while issuing START TRANSACTION, we'll not have bumped
xact_depth.  (At least for the case I was testing, this fix masks the
other problem; but it still seems like a good idea to have the PGconn
fallback logic.)

Per investigation of bug #9087 from Craig Lucas.  Backpatch to 9.3 where
this code was introduced.
contrib/postgres_fdw/connection.c
contrib/postgres_fdw/postgres_fdw.c
contrib/postgres_fdw/postgres_fdw.h