]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Back-patch fix for 'btree: failed to add item to the page in _bt_sort (2)'
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 4 Jan 2001 21:51:49 +0000 (21:51 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 4 Jan 2001 21:51:49 +0000 (21:51 +0000)
failure during index creation.  This problem should be gone in current
sources, but I just thought I'd commit the 7.0.* patch in case anyone
else needs it.

src/backend/access/nbtree/nbtsort.c

index 65e757e42b3b176ab7560768ed980e0d500d0d44..3b35200194ac21d32c822c563ab2a70497a072a1 100644 (file)
@@ -28,7 +28,7 @@
  * Portions Copyright (c) 1994, Regents of the University of California
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtsort.c,v 1.52 2000/04/12 17:14:49 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtsort.c,v 1.52.2.1 2001/01/04 21:51:49 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -321,7 +321,7 @@ _bt_buildadd(Relation index, Size keysz, ScanKey scankey,
                         btisz,
                         (PageGetPageSize(npage) - sizeof(PageHeaderData) - MAXALIGN(sizeof(BTPageOpaqueData))) /3 - sizeof(ItemIdData));
 
-       if (pgspc < btisz)
+       while (pgspc < btisz)
        {
                Buffer          obuf = nbuf;
                Page            opage = npage;
@@ -436,6 +436,13 @@ _bt_buildadd(Relation index, Size keysz, ScanKey scankey,
                 * we aren't locking).
                 */
                _bt_wrtbuf(index, obuf);
+
+               /*
+                * Recompute pgspc and loop back to check free space again.  If
+                * we were forced to split at a bad split point, we might need
+                * to split again.
+                */
+               pgspc = PageGetFreeSpace(npage);
        }
 
        /*