Allow _h_indexbuild() to be interrupted.
authorTom Lane <[email protected]>
Fri, 13 Sep 2024 20:16:47 +0000 (16:16 -0400)
committerTom Lane <[email protected]>
Fri, 13 Sep 2024 20:16:47 +0000 (16:16 -0400)
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

src/backend/access/hash/hashsort.c

index b67b2207c05aaaf8d3b93846256f451cfcf9d1e2..15873d45942e9a643f3eb2f0f315f9bdb03865e4 100644 (file)
@@ -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);
    }