aboutsummaryrefslogtreecommitdiff
path: root/contrib/postgres_fdw/postgres_fdw.h
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2014-02-03 21:30:02 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2014-02-03 21:30:20 -0500
commit00d4f2af8bd6a1b9db2f676cc76b64d98ace99fb (patch)
tree6f420eb8075c6084f177fe6ffae3d0d2d505e8c9 /contrib/postgres_fdw/postgres_fdw.h
parent489e6ac5a1a4ca7e4ca7683a86ccd8a5d5e3eb59 (diff)
downloadpostgresql-00d4f2af8bd6a1b9db2f676cc76b64d98ace99fb.tar.gz
postgresql-00d4f2af8bd6a1b9db2f676cc76b64d98ace99fb.zip
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.
Diffstat (limited to 'contrib/postgres_fdw/postgres_fdw.h')
-rw-r--r--contrib/postgres_fdw/postgres_fdw.h4
1 files changed, 2 insertions, 2 deletions
diff --git a/contrib/postgres_fdw/postgres_fdw.h b/contrib/postgres_fdw/postgres_fdw.h
index 85fc25aaef4..228345d7864 100644
--- a/contrib/postgres_fdw/postgres_fdw.h
+++ b/contrib/postgres_fdw/postgres_fdw.h
@@ -30,8 +30,8 @@ extern PGconn *GetConnection(ForeignServer *server, UserMapping *user,
extern void ReleaseConnection(PGconn *conn);
extern unsigned int GetCursorNumber(PGconn *conn);
extern unsigned int GetPrepStmtNumber(PGconn *conn);
-extern void pgfdw_report_error(int elevel, PGresult *res, bool clear,
- const char *sql);
+extern void pgfdw_report_error(int elevel, PGresult *res, PGconn *conn,
+ bool clear, const char *sql);
/* in option.c */
extern int ExtractConnectionOptions(List *defelems,