From: Tom Lane Date: Wed, 1 Jun 2011 21:01:59 +0000 (-0400) Subject: Allow hash joins to be interrupted while searching hash table for match. X-Git-Tag: REL9_1_BETA2~44 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0c99d41ec887051fb0cc6e35e358ecc936a13584;p=postgresql Allow hash joins to be interrupted while searching hash table for match. Per experimentation with a recent example, in which unreasonable amounts of time could elapse before the backend would respond to a query-cancel. This might be something to back-patch, but the patch doesn't apply cleanly because this code was rewritten for 9.1. Given the lack of field complaints I won't bother for now. Cédric Villemain --- diff --git a/src/backend/executor/nodeHashjoin.c b/src/backend/executor/nodeHashjoin.c index 26da3b2fdf..0e7ca625ce 100644 --- a/src/backend/executor/nodeHashjoin.c +++ b/src/backend/executor/nodeHashjoin.c @@ -19,6 +19,7 @@ #include "executor/hashjoin.h" #include "executor/nodeHash.h" #include "executor/nodeHashjoin.h" +#include "miscadmin.h" #include "utils/memutils.h" @@ -262,6 +263,13 @@ ExecHashJoin(HashJoinState *node) case HJ_SCAN_BUCKET: + /* + * We check for interrupts here because this corresponds to + * where we'd fetch a row from a child plan node in other + * join types. + */ + CHECK_FOR_INTERRUPTS(); + /* * Scan the selected hash bucket for matches to current outer */