diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2024-09-13 16:16:47 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2024-09-13 16:16:47 -0400 |
commit | d23109f4bd65ef217dbd72846afa949927640463 (patch) | |
tree | 62afdab8420f8014868d947fbfd5fb41cf88d6bb /src | |
parent | 0938a4ecda33ce0630dd4cb01466f8ef4c41f8b4 (diff) | |
download | postgresql-d23109f4bd65ef217dbd72846afa949927640463.tar.gz postgresql-d23109f4bd65ef217dbd72846afa949927640463.zip |
Allow _h_indexbuild() to be interrupted.
When we are building a hash index that is large enough to need
pre-sorting (larger than either maintenance_work_mem or NBuffers),
the initial sorting phase is interruptible, but the insertion
phase wasn't. Add the missing CHECK_FOR_INTERRUPTS().
Per bug #18616 from Alexander Lakhin. Back-patch to all
supported branches.
Pavel Borisov
Discussion: https://postgr.es/m/18616-acbb9e5caf41e964@postgresql.org
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/access/hash/hashsort.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/backend/access/hash/hashsort.c b/src/backend/access/hash/hashsort.c index b67b2207c05..15873d45942 100644 --- a/src/backend/access/hash/hashsort.c +++ b/src/backend/access/hash/hashsort.c @@ -148,6 +148,9 @@ _h_indexbuild(HSpool *hspool, Relation heapRel) /* the tuples are sorted by hashkey, so pass 'sorted' as true */ _hash_doinsert(hspool->index, itup, heapRel, true); + /* allow insertion phase to be interrupted, and track progress */ + CHECK_FOR_INTERRUPTS(); + pgstat_progress_update_param(PROGRESS_CREATEIDX_TUPLES_DONE, ++tups_done); } |