]> granicus.if.org Git - postgresql/commitdiff
Revert fix missing call to table_finish_bulk_insert during COPY
authorDavid Rowley <drowley@postgresql.org>
Mon, 1 Jul 2019 15:44:56 +0000 (03:44 +1200)
committerDavid Rowley <drowley@postgresql.org>
Mon, 1 Jul 2019 15:44:56 +0000 (03:44 +1200)
This reverts commits 4de60244e and b2d69806d. Further thought is
required to make this work properly.

src/backend/commands/copy.c

index a4eee4c0d745f8e0f4b5ec314698c44402dfbb8b..f1161f0fee16d26142fd1abb323756722d00fc39 100644 (file)
@@ -2518,8 +2518,7 @@ CopyMultiInsertBufferFlush(CopyMultiInsertInfo *miinfo,
  * The buffer must be flushed before cleanup.
  */
 static inline void
-CopyMultiInsertBufferCleanup(CopyMultiInsertInfo *miinfo,
-                                                        CopyMultiInsertBuffer *buffer)
+CopyMultiInsertBufferCleanup(CopyMultiInsertBuffer *buffer)
 {
        int                     i;
 
@@ -2535,9 +2534,6 @@ CopyMultiInsertBufferCleanup(CopyMultiInsertInfo *miinfo,
        for (i = 0; i < MAX_BUFFERED_TUPLES && buffer->slots[i] != NULL; i++)
                ExecDropSingleTupleTableSlot(buffer->slots[i]);
 
-       table_finish_bulk_insert(buffer->resultRelInfo->ri_RelationDesc,
-                                                        miinfo->ti_options);
-
        pfree(buffer);
 }
 
@@ -2589,7 +2585,7 @@ CopyMultiInsertInfoFlush(CopyMultiInsertInfo *miinfo, ResultRelInfo *curr_rri)
                        buffer = (CopyMultiInsertBuffer *) linitial(miinfo->multiInsertBuffers);
                }
 
-               CopyMultiInsertBufferCleanup(miinfo, buffer);
+               CopyMultiInsertBufferCleanup(buffer);
                miinfo->multiInsertBuffers = list_delete_first(miinfo->multiInsertBuffers);
        }
 }
@@ -2603,7 +2599,7 @@ CopyMultiInsertInfoCleanup(CopyMultiInsertInfo *miinfo)
        ListCell   *lc;
 
        foreach(lc, miinfo->multiInsertBuffers)
-               CopyMultiInsertBufferCleanup(miinfo, lfirst(lc));
+               CopyMultiInsertBufferCleanup(lfirst(lc));
 
        list_free(miinfo->multiInsertBuffers);
 }
@@ -3325,6 +3321,9 @@ CopyFrom(CopyState cstate)
        {
                if (!CopyMultiInsertInfoIsEmpty(&multiInsertInfo))
                        CopyMultiInsertInfoFlush(&multiInsertInfo, NULL);
+
+               /* Tear down the multi-insert buffer data */
+               CopyMultiInsertInfoCleanup(&multiInsertInfo);
        }
 
        /* Done, clean up */
@@ -3367,11 +3366,7 @@ CopyFrom(CopyState cstate)
 
        FreeExecutorState(estate);
 
-       if (insertMethod != CIM_SINGLE)
-       {
-               /* Tear down the multi-insert buffer data */
-               CopyMultiInsertInfoCleanup(&multiInsertInfo);
-       }
+       table_finish_bulk_insert(cstate->rel, ti_options);
 
        return processed;
 }