Take fillfactor into account in the new COPY bulk heap insert code.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Sat, 26 Nov 2011 10:11:00 +0000 (12:11 +0200)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Sat, 26 Nov 2011 10:11:00 +0000 (12:11 +0200)
Jeff Janes

src/backend/access/heap/heapam.c

index 630c3ab26c0d484f51befd4224dc1aa4fa304e9d..7b27c2305821b4e5633759f7b3058a90f0e2c07c 100644 (file)
@@ -2093,8 +2093,11 @@ heap_multi_insert(Relation relation, HeapTuple *tuples, int ntuples,
        char       *scratch = NULL;
        Page            page;
        bool            needwal;
+       Size            saveFreeSpace;
 
        needwal = !(options & HEAP_INSERT_SKIP_WAL) && RelationNeedsWAL(relation);
+       saveFreeSpace = RelationGetTargetPageFreeSpace(relation,
+                                                                                                  HEAP_DEFAULT_FILLFACTOR);
 
        /* Toast and set header data in all the tuples */
        heaptuples = palloc(ntuples * sizeof(HeapTuple));
@@ -2157,7 +2160,7 @@ heap_multi_insert(Relation relation, HeapTuple *tuples, int ntuples,
                {
                        HeapTuple       heaptup = heaptuples[ndone + nthispage];
 
-                       if (PageGetHeapFreeSpace(page) < MAXALIGN(heaptup->t_len))
+                       if (PageGetHeapFreeSpace(page) - saveFreeSpace < MAXALIGN(heaptup->t_len))
                                break;
 
                        RelationPutHeapTuple(relation, buffer, heaptup);