aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>2011-11-26 12:11:00 +0200
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>2011-11-26 12:11:00 +0200
commitdea5f6cefe74a6cb51a1cfd39e12a2e1a026df35 (patch)
treeee70a2701d2d64841a2f65b2a8c606d3a4cba7fb /src
parent32fb4546e3f8cf9c2ef524e9c20766a046521193 (diff)
downloadpostgresql-dea5f6cefe74a6cb51a1cfd39e12a2e1a026df35.tar.gz
postgresql-dea5f6cefe74a6cb51a1cfd39e12a2e1a026df35.zip
Take fillfactor into account in the new COPY bulk heap insert code.
Jeff Janes
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/heap/heapam.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c
index 630c3ab26c0..7b27c230582 100644
--- a/src/backend/access/heap/heapam.c
+++ b/src/backend/access/heap/heapam.c
@@ -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);