Revert: Let table AM insertion methods control index insertion
authorAlexander Korotkov <akorotkov@postgresql.org>
Thu, 11 Apr 2024 12:47:53 +0000 (15:47 +0300)
committerAlexander Korotkov <akorotkov@postgresql.org>
Thu, 11 Apr 2024 13:01:30 +0000 (16:01 +0300)
This commit reverts b1484a3f19 per review by Andres Freund.

Discussion: https://postgr.es/m/20240410165236.rwyrny7ihi4ddxw4%40awork3.anarazel.de

12 files changed:
src/backend/access/heap/heapam.c
src/backend/access/heap/heapam_handler.c
src/backend/access/table/tableam.c
src/backend/catalog/indexing.c
src/backend/commands/copyfrom.c
src/backend/commands/createas.c
src/backend/commands/matview.c
src/backend/commands/tablecmds.c
src/backend/executor/execReplication.c
src/backend/executor/nodeModifyTable.c
src/include/access/heapam.h
src/include/access/tableam.h

index 08f6a10ac3da70cdcd725a0edc45b7680909c70b..7f642edf4587b98099487fba86f68d9618fced91 100644 (file)
@@ -2257,8 +2257,7 @@ 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,
-                 bool *insert_indexes)
+                 CommandId cid, int options, BulkInsertState bistate)
 {
    TransactionId xid = GetCurrentTransactionId();
    HeapTuple  *heaptuples;
@@ -2607,7 +2606,6 @@ 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;
 }
 
 /*
index 2c423286d723fd290a6194441d3328c0ab02f45e..00d827053274df81fba4c9a24f7a987c974af4e2 100644 (file)
@@ -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, bool *insert_indexes)
+                   int options, BulkInsertState bistate)
 {
    bool        shouldFree = true;
    HeapTuple   tuple = ExecFetchSlotHeapTuple(slot, true, &shouldFree);
@@ -261,8 +261,6 @@ heapam_tuple_insert(Relation relation, TupleTableSlot *slot, CommandId cid,
    if (shouldFree)
        pfree(tuple);
 
-   *insert_indexes = true;
-
    return slot;
 }
 
index 805d222cebc466cc2d3da2d965656b61de9f51e4..8d3675be959c16486db3e9168013eac2e5705b19 100644 (file)
@@ -273,11 +273,9 @@ table_tuple_get_latest_tid(TableScanDesc scan, ItemPointer tid)
  * default command ID and not allowing access to the speedup options.
  */
 void
-simple_table_tuple_insert(Relation rel, TupleTableSlot *slot,
-                         bool *insert_indexes)
+simple_table_tuple_insert(Relation rel, TupleTableSlot *slot)
 {
-   table_tuple_insert(rel, slot, GetCurrentCommandId(true), 0, NULL,
-                      insert_indexes);
+   table_tuple_insert(rel, slot, GetCurrentCommandId(true), 0, NULL);
 }
 
 /*
index 4d404f22f835f2a39f6385ef136ce0cfb822b8c6..d0d1abda58af3d6647b88e101e09e8b276b65af6 100644 (file)
@@ -273,14 +273,12 @@ void
 CatalogTuplesMultiInsertWithInfo(Relation heapRel, TupleTableSlot **slot,
                                 int ntuples, CatalogIndexState indstate)
 {
-   bool        insertIndexes;
-
    /* Nothing to do */
    if (ntuples <= 0)
        return;
 
    heap_multi_insert(heapRel, slot, ntuples,
-                     GetCurrentCommandId(true), 0, NULL, &insertIndexes);
+                     GetCurrentCommandId(true), 0, NULL);
 
    /*
     * There is no equivalent to heap_multi_insert for the catalog indexes, so
index 9d2900041e600f8a9dbe62a53df4bc6a5aae2c9c..06bc14636d3fe3e8e980184b572c2b39f404a998 100644 (file)
@@ -395,7 +395,6 @@ CopyMultiInsertBufferFlush(CopyMultiInsertInfo *miinfo,
        bool        line_buf_valid = cstate->line_buf_valid;
        uint64      save_cur_lineno = cstate->cur_lineno;
        MemoryContext oldcontext;
-       bool        insertIndexes;
 
        Assert(buffer->bistate != NULL);
 
@@ -415,8 +414,7 @@ CopyMultiInsertBufferFlush(CopyMultiInsertInfo *miinfo,
                           nused,
                           mycid,
                           ti_options,
-                          buffer->bistate,
-                          &insertIndexes);
+                          buffer->bistate);
        MemoryContextSwitchTo(oldcontext);
 
        for (i = 0; i < nused; i++)
@@ -425,7 +423,7 @@ CopyMultiInsertBufferFlush(CopyMultiInsertInfo *miinfo,
             * If there are any indexes, update them for all the inserted
             * tuples, and run AFTER ROW INSERT triggers.
             */
-           if (insertIndexes && resultRelInfo->ri_NumIndices > 0)
+           if (resultRelInfo->ri_NumIndices > 0)
            {
                List       *recheckIndexes;
 
@@ -1265,14 +1263,11 @@ CopyFrom(CopyFromState cstate)
                    }
                    else
                    {
-                       bool        insertIndexes;
-
                        /* OK, store the tuple and create index entries for it */
                        table_tuple_insert(resultRelInfo->ri_RelationDesc,
-                                          myslot, mycid, ti_options, bistate,
-                                          &insertIndexes);
+                                          myslot, mycid, ti_options, bistate);
 
-                       if (insertIndexes && resultRelInfo->ri_NumIndices > 0)
+                       if (resultRelInfo->ri_NumIndices > 0)
                            recheckIndexes = ExecInsertIndexTuples(resultRelInfo,
                                                                   myslot,
                                                                   estate,
index afd3dace079e1bc1a7c6f2185a3304327cc798c1..62050f4dc590b8a17326e64405562e91cc4923b9 100644 (file)
@@ -578,7 +578,6 @@ static bool
 intorel_receive(TupleTableSlot *slot, DestReceiver *self)
 {
    DR_intorel *myState = (DR_intorel *) self;
-   bool        insertIndexes;
 
    /* Nothing to insert if WITH NO DATA is specified. */
    if (!myState->into->skipData)
@@ -595,8 +594,7 @@ intorel_receive(TupleTableSlot *slot, DestReceiver *self)
                           slot,
                           myState->output_cid,
                           myState->ti_options,
-                          myState->bistate,
-                          &insertIndexes);
+                          myState->bistate);
    }
 
    /* We know this is a newly created relation, so there are no indexes */
index 9ec13d098467d4417511af25145f98f9a6b5c61d..6d09b755564e32bbe81bf1c3c3a59e29e4709a17 100644 (file)
@@ -476,7 +476,6 @@ static bool
 transientrel_receive(TupleTableSlot *slot, DestReceiver *self)
 {
    DR_transientrel *myState = (DR_transientrel *) self;
-   bool        insertIndexes;
 
    /*
     * Note that the input slot might not be of the type of the target
@@ -491,8 +490,7 @@ transientrel_receive(TupleTableSlot *slot, DestReceiver *self)
                       slot,
                       myState->output_cid,
                       myState->ti_options,
-                      myState->bistate,
-                      &insertIndexes);
+                      myState->bistate);
 
    /* We know this is a newly created relation, so there are no indexes */
 
index b3fcf6d3cd48d2af9f2c55e66a132ef1009f3bd7..571feea270e142a44fb48406d40c613e9928dc19 100644 (file)
@@ -6391,12 +6391,8 @@ ATRewriteTable(AlteredTableInfo *tab, Oid OIDNewHeap, LOCKMODE lockmode)
 
            /* Write the tuple out to the new relation */
            if (newrel)
-           {
-               bool        insertIndexes;
-
                table_tuple_insert(newrel, insertslot, mycid,
-                                  ti_options, bistate, &insertIndexes);
-           }
+                                  ti_options, bistate);
 
            ResetExprContext(econtext);
 
@@ -21037,7 +21033,6 @@ moveSplitTableRows(Relation rel, Relation splitRel, List *partlist, List *newPar
    while (table_scan_getnextslot(scan, ForwardScanDirection, srcslot))
    {
        bool        found = false;
-       bool        insert_indexes;
        TupleTableSlot *insertslot;
 
        /* Extract data from old tuple. */
@@ -21090,12 +21085,9 @@ moveSplitTableRows(Relation rel, Relation splitRel, List *partlist, List *newPar
            ExecStoreVirtualTuple(insertslot);
        }
 
-       /*
-        * Write the tuple out to the new relation.  We ignore the
-        * 'insert_indexes' flag since newPartRel has no indexes anyway.
-        */
+       /* Write the tuple out to the new relation. */
        (void) table_tuple_insert(pc->partRel, insertslot, mycid,
-                                 ti_options, pc->bistate, &insert_indexes);
+                                 ti_options, pc->bistate);
 
        ResetExprContext(econtext);
 
@@ -21364,7 +21356,6 @@ moveMergedTablesRows(Relation rel, List *mergingPartitionsList,
        while (table_scan_getnextslot(scan, ForwardScanDirection, srcslot))
        {
            TupleTableSlot *insertslot;
-           bool        insert_indexes;
 
            /* Extract data from old tuple. */
            slot_getallattrs(srcslot);
@@ -21389,12 +21380,9 @@ moveMergedTablesRows(Relation rel, List *mergingPartitionsList,
                ExecStoreVirtualTuple(insertslot);
            }
 
-           /*
-            * Write the tuple out to the new relation.  We ignore the
-            * 'insert_indexes' flag since newPartRel has no indexes anyway.
-            */
+           /* Write the tuple out to the new relation. */
            (void) table_tuple_insert(newPartRel, insertslot, mycid,
-                                     ti_options, bistate, &insert_indexes);
+                                     ti_options, bistate);
 
            CHECK_FOR_INTERRUPTS();
        }
index db685473fc0debfb4b51df5f498ccdf9834e4d02..0cad843fb6981acc9b951e1f81eaaa5048cfdf4d 100644 (file)
@@ -509,7 +509,6 @@ ExecSimpleRelationInsert(ResultRelInfo *resultRelInfo,
    if (!skip_tuple)
    {
        List       *recheckIndexes = NIL;
-       bool        insertIndexes;
 
        /* Compute stored generated columns */
        if (rel->rd_att->constr &&
@@ -524,10 +523,9 @@ ExecSimpleRelationInsert(ResultRelInfo *resultRelInfo,
            ExecPartitionCheck(resultRelInfo, slot, estate, true);
 
        /* OK, store the tuple and create index entries for it */
-       simple_table_tuple_insert(resultRelInfo->ri_RelationDesc, slot,
-                                 &insertIndexes);
+       simple_table_tuple_insert(resultRelInfo->ri_RelationDesc, slot);
 
-       if (insertIndexes && resultRelInfo->ri_NumIndices > 0)
+       if (resultRelInfo->ri_NumIndices > 0)
            recheckIndexes = ExecInsertIndexTuples(resultRelInfo,
                                                   slot, estate, false, false,
                                                   NULL, NIL, false);
index df63844b35013f48874ea3524866ecc92400c9f7..325d380b0a97e4c4e5c4611afb6efd74902baf29 100644 (file)
@@ -1135,15 +1135,13 @@ ExecInsert(ModifyTableContext *context,
        }
        else
        {
-           bool        insertIndexes;
-
            /* insert the tuple normally */
            slot = table_tuple_insert(resultRelationDesc, slot,
                                      estate->es_output_cid,
-                                     0, NULL, &insertIndexes);
+                                     0, NULL);
 
            /* insert index entries for tuple */
-           if (insertIndexes && resultRelInfo->ri_NumIndices > 0)
+           if (resultRelInfo->ri_NumIndices > 0)
                recheckIndexes = ExecInsertIndexTuples(resultRelInfo,
                                                       slot, estate, false,
                                                       false, NULL, NIL,
index f84dbe629fe234f24030d6a8f3fc54f135110f4d..3abe226bd5dc98c3918ed7f1a5f362336e0b2583 100644 (file)
@@ -320,7 +320,7 @@ extern void heap_insert(Relation relation, HeapTuple tup, CommandId cid,
                        int options, BulkInsertState bistate);
 extern void heap_multi_insert(Relation relation, struct TupleTableSlot **slots,
                              int ntuples, CommandId cid, int options,
-                             BulkInsertState bistate, bool *insert_indexes);
+                             BulkInsertState bistate);
 extern TM_Result heap_delete(Relation relation, ItemPointer tid,
                             CommandId cid, Snapshot crosscheck, int options,
                             struct TM_FailureData *tmfd, bool changingPart,
index a07f250b46257bf1fdd01a1f01bc1c94ee35f275..00deb36f5a489628f41aa998f8d3fabec3dfadb1 100644 (file)
@@ -519,8 +519,7 @@ typedef struct TableAmRoutine
    /* see table_tuple_insert() for reference about parameters */
    TupleTableSlot *(*tuple_insert) (Relation rel, TupleTableSlot *slot,
                                     CommandId cid, int options,
-                                    struct BulkInsertStateData *bistate,
-                                    bool *insert_indexes);
+                                    struct BulkInsertStateData *bistate);
 
    /* see table_tuple_insert_speculative() for reference about parameters */
    void        (*tuple_insert_speculative) (Relation rel,
@@ -538,8 +537,7 @@ typedef struct TableAmRoutine
 
    /* see table_multi_insert() for reference about parameters */
    void        (*multi_insert) (Relation rel, TupleTableSlot **slots, int nslots,
-                                CommandId cid, int options, struct BulkInsertStateData *bistate,
-                                bool *insert_indexes);
+                                CommandId cid, int options, struct BulkInsertStateData *bistate);
 
    /* see table_tuple_delete() for reference about parameters */
    TM_Result   (*tuple_delete) (Relation rel,
@@ -1387,12 +1385,6 @@ table_index_delete_tuples(Relation rel, TM_IndexDeleteOp *delstate)
  * behavior) is also just passed through to RelationGetBufferForTuple. If
  * `bistate` is provided, table_finish_bulk_insert() needs to be called.
  *
- * The table AM's implementation of tuple_insert should set `*insert_indexes`
- * to true if it expects the caller to insert the relevant index tuples
- * (as heap table AM does).  It should set `*insert_indexes` to false if
- * it cares about index inserts itself and doesn't want the caller to do
- * index inserts.
- *
  * Returns the slot containing the inserted tuple, which may differ from the
  * given slot. For instance, the source slot may be VirtualTupleTableSlot, but
  * the result slot may correspond to the table AM. On return the slot's
@@ -1402,11 +1394,10 @@ table_index_delete_tuples(Relation rel, TM_IndexDeleteOp *delstate)
  */
 static inline TupleTableSlot *
 table_tuple_insert(Relation rel, TupleTableSlot *slot, CommandId cid,
-                  int options, struct BulkInsertStateData *bistate,
-                  bool *insert_indexes)
+                  int options, struct BulkInsertStateData *bistate)
 {
    return rel->rd_tableam->tuple_insert(rel, slot, cid, options,
-                                        bistate, insert_indexes);
+                                        bistate);
 }
 
 /*
@@ -1458,11 +1449,10 @@ table_tuple_complete_speculative(Relation rel, TupleTableSlot *slot,
  */
 static inline void
 table_multi_insert(Relation rel, TupleTableSlot **slots, int nslots,
-                  CommandId cid, int options, struct BulkInsertStateData *bistate,
-                  bool *insert_indexes)
+                  CommandId cid, int options, struct BulkInsertStateData *bistate)
 {
    rel->rd_tableam->multi_insert(rel, slots, nslots,
-                                 cid, options, bistate, insert_indexes);
+                                 cid, options, bistate);
 }
 
 /*
@@ -2087,8 +2077,7 @@ table_scan_sample_next_tuple(TableScanDesc scan,
  * ----------------------------------------------------------------------------
  */
 
-extern void simple_table_tuple_insert(Relation rel, TupleTableSlot *slot,
-                                     bool *insert_indexes);
+extern void simple_table_tuple_insert(Relation rel, TupleTableSlot *slot);
 extern void simple_table_tuple_delete(Relation rel, ItemPointer tid,
                                      Snapshot snapshot,
                                      TupleTableSlot *oldSlot);