diff --git a/contrib/postgres_fdw/connection.c b/contrib/postgres_fdw/connection.c index 4d64dfebf6..29fcb6a76e 100644 --- a/contrib/postgres_fdw/connection.c +++ b/contrib/postgres_fdw/connection.c @@ -1441,10 +1441,17 @@ pgfdw_abort_cleanup(ConnCacheEntry *entry, const char *sql, bool toplevel) entry->have_prep_stmt = false; entry->have_error = false; - /* Also reset per-connection state */ - memset(&entry->state, 0, sizeof(entry->state)); } + /* + * If pendingAreq of the per-connection state is not NULL, it means that + * an asynchronous fetch begun by fetch_more_data_begin() was not done + * successfully and thus the per-connection state was not reset in + * fetch_more_data(); in that case reset the per-connection state here. + */ + if (entry->state.pendingAreq) + memset(&entry->state, 0, sizeof(entry->state)); + /* Disarm changing_xact_state if it all worked */ entry->changing_xact_state = false; }