diff options
author | Vadim B. Mikheev <vadim4o@yahoo.com> | 1998-02-25 23:40:32 +0000 |
---|---|---|
committer | Vadim B. Mikheev <vadim4o@yahoo.com> | 1998-02-25 23:40:32 +0000 |
commit | 20ef87171c86213eb64d47ba5b9fc0d4ddbf0d19 (patch) | |
tree | e5c989a7bd9248d54a6d378b97a37d21b01b95d2 /src | |
parent | 48a61651b547797cca3bb52a0a8f50b8755d93f8 (diff) | |
download | postgresql-20ef87171c86213eb64d47ba5b9fc0d4ddbf0d19.tar.gz postgresql-20ef87171c86213eb64d47ba5b9fc0d4ddbf0d19.zip |
Fix 6.X vacuum bug in shrinking code.
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/commands/vacuum.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index f586158570e..47d5d2fb47a 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++) |