mirror of
https://github.com/postgres/postgres.git
synced 2025-11-06 07:49:08 +03:00
Let table AM insertion methods control index insertion
Previously, the executor did index insert unconditionally after calling table AM interface methods tuple_insert() and multi_insert(). This commit introduces the new parameter insert_indexes for these two methods. Setting '*insert_indexes' to true saves the current logic. Setting it to false indicates that table AM cares about index inserts itself and doesn't want the caller to do that. Discussion: https://postgr.es/m/CAPpHfdurb9ycV8udYqM%3Do0sPS66PJ4RCBM1g-bBpvzUfogY0EA%40mail.gmail.com Reviewed-by: Pavel Borisov, Matthias van de Meent, Mark Dilger
This commit is contained in:
@@ -2088,7 +2088,8 @@ heap_multi_insert_pages(HeapTuple *heaptuples, int done, int ntuples, Size saveF
|
||||
*/
|
||||
void
|
||||
heap_multi_insert(Relation relation, TupleTableSlot **slots, int ntuples,
|
||||
CommandId cid, int options, BulkInsertState bistate)
|
||||
CommandId cid, int options, BulkInsertState bistate,
|
||||
bool *insert_indexes)
|
||||
{
|
||||
TransactionId xid = GetCurrentTransactionId();
|
||||
HeapTuple *heaptuples;
|
||||
@@ -2437,6 +2438,7 @@ heap_multi_insert(Relation relation, TupleTableSlot **slots, int ntuples,
|
||||
slots[i]->tts_tid = heaptuples[i]->t_self;
|
||||
|
||||
pgstat_count_heap_insert(relation, ntuples);
|
||||
*insert_indexes = true;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -245,7 +245,7 @@ heapam_tuple_satisfies_snapshot(Relation rel, TupleTableSlot *slot,
|
||||
|
||||
static TupleTableSlot *
|
||||
heapam_tuple_insert(Relation relation, TupleTableSlot *slot, CommandId cid,
|
||||
int options, BulkInsertState bistate)
|
||||
int options, BulkInsertState bistate, bool *insert_indexes)
|
||||
{
|
||||
bool shouldFree = true;
|
||||
HeapTuple tuple = ExecFetchSlotHeapTuple(slot, true, &shouldFree);
|
||||
@@ -261,6 +261,8 @@ heapam_tuple_insert(Relation relation, TupleTableSlot *slot, CommandId cid,
|
||||
if (shouldFree)
|
||||
pfree(tuple);
|
||||
|
||||
*insert_indexes = true;
|
||||
|
||||
return slot;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user