]> granicus.if.org Git - postgresql/commitdiff
Fix 6.X vacuum bug in shrinking code.
authorVadim B. Mikheev <vadim4o@yahoo.com>
Wed, 25 Feb 1998 23:40:32 +0000 (23:40 +0000)
committerVadim B. Mikheev <vadim4o@yahoo.com>
Wed, 25 Feb 1998 23:40:32 +0000 (23:40 +0000)
src/backend/commands/vacuum.c

index f586158570ec40471b9c636cef7d3653ac6239e4..47d5d2fb47a9cc51d60157fe6773d68fca65d62c 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.61 1998/02/03 21:57:27 momjian Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.62 1998/02/25 23:40:32 vadim Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1083,23 +1083,19 @@ vc_rpfheap(VRelStats *vacrelstats, Relation onerel,
                                        /*
                                         * If no one tuple can't be added to this page -
                                         * remove page from Fvpl. - vadim 11/27/96
+                                        *
+                                        * But we can't remove last page - this is our
+                                        * "show-stopper" !!!   - vadim 02/25/98
                                         */
-                                       if (!vc_enough_space(ToVpd, vacrelstats->min_tlen))
+                                       if (ToVpd != Fvplast && 
+                                               !vc_enough_space(ToVpd, vacrelstats->min_tlen))
                                        {
-                                               if (ToVpd != Fvplast)
-                                               {
-                                                       Assert(Fnpages > ToVpI + 1);
-                                                       memmove(Fvpl->vpl_pgdesc + ToVpI,
-                                                                       Fvpl->vpl_pgdesc + ToVpI + 1,
-                                                       sizeof(VPageDescr *) * (Fnpages - ToVpI - 1));
-                                               }
-                                               Assert(Fnpages >= 1);
+                                               Assert(Fnpages > ToVpI + 1);
+                                               memmove(Fvpl->vpl_pgdesc + ToVpI,
+                                                               Fvpl->vpl_pgdesc + ToVpI + 1,
+                                                               sizeof(VPageDescr *) * (Fnpages - ToVpI - 1));
                                                Fnpages--;
-                                               if (Fnpages == 0)
-                                                       break;
-                                               /* get prev reapped page from Fvpl */
-                                               Fvplast = Fvpl->vpl_pgdesc[Fnpages - 1];
-                                               Fblklast = Fvplast->vpd_blkno;
+                                               Assert (Fvplast == Fvpl->vpl_pgdesc[Fnpages - 1]);
                                        }
                                }
                                for (i = 0; i < Fnpages; i++)