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
This commit is contained in:
Tom Lane 2024-09-13 16:16:47 -04:00
parent 9a23967063
commit fae55f0bb3

View 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);
}