From: Vadim B. Mikheev Date: Wed, 25 Feb 1998 23:40:32 +0000 (+0000) Subject: Fix 6.X vacuum bug in shrinking code. X-Git-Tag: REL6_3~55 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=20ef87171c86213eb64d47ba5b9fc0d4ddbf0d19;p=postgresql Fix 6.X vacuum bug in shrinking code. --- diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index f586158570..47d5d2fb47 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -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++)