mirror of
https://github.com/postgres/postgres.git
synced 2025-04-21 12:05:57 +03:00
Persuade GIN to react to control-C in a reasonable amount of time
while building a GIN index.
This commit is contained in:
parent
b62f246fb0
commit
8282d6fc70
@ -8,7 +8,7 @@
|
|||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/access/gin/gininsert.c,v 1.12 2008/05/12 00:00:44 alvherre Exp $
|
* $PostgreSQL: pgsql/src/backend/access/gin/gininsert.c,v 1.13 2008/05/16 01:27:06 tgl Exp $
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -246,7 +246,11 @@ ginBuildCallback(Relation index, HeapTuple htup, Datum *values,
|
|||||||
uint32 nlist;
|
uint32 nlist;
|
||||||
|
|
||||||
while ((list = ginGetEntry(&buildstate->accum, &entry, &nlist)) != NULL)
|
while ((list = ginGetEntry(&buildstate->accum, &entry, &nlist)) != NULL)
|
||||||
|
{
|
||||||
|
/* there could be many entries, so be willing to abort here */
|
||||||
|
CHECK_FOR_INTERRUPTS();
|
||||||
ginEntryInsert(index, &buildstate->ginstate, entry, list, nlist, TRUE);
|
ginEntryInsert(index, &buildstate->ginstate, entry, list, nlist, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
MemoryContextReset(buildstate->tmpCtx);
|
MemoryContextReset(buildstate->tmpCtx);
|
||||||
ginInitBA(&buildstate->accum);
|
ginInitBA(&buildstate->accum);
|
||||||
@ -331,9 +335,14 @@ ginbuild(PG_FUNCTION_ARGS)
|
|||||||
reltuples = IndexBuildHeapScan(heap, index, indexInfo,
|
reltuples = IndexBuildHeapScan(heap, index, indexInfo,
|
||||||
ginBuildCallback, (void *) &buildstate);
|
ginBuildCallback, (void *) &buildstate);
|
||||||
|
|
||||||
|
/* dump remaining entries to the index */
|
||||||
oldCtx = MemoryContextSwitchTo(buildstate.tmpCtx);
|
oldCtx = MemoryContextSwitchTo(buildstate.tmpCtx);
|
||||||
while ((list = ginGetEntry(&buildstate.accum, &entry, &nlist)) != NULL)
|
while ((list = ginGetEntry(&buildstate.accum, &entry, &nlist)) != NULL)
|
||||||
|
{
|
||||||
|
/* there could be many entries, so be willing to abort here */
|
||||||
|
CHECK_FOR_INTERRUPTS();
|
||||||
ginEntryInsert(index, &buildstate.ginstate, entry, list, nlist, TRUE);
|
ginEntryInsert(index, &buildstate.ginstate, entry, list, nlist, TRUE);
|
||||||
|
}
|
||||||
MemoryContextSwitchTo(oldCtx);
|
MemoryContextSwitchTo(oldCtx);
|
||||||
|
|
||||||
MemoryContextDelete(buildstate.tmpCtx);
|
MemoryContextDelete(buildstate.tmpCtx);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user