From 3110cd237cb89b30f87d8ad1c83f06b9440b3023 Mon Sep 17 00:00:00 2001 From: Bruce Momjian <bruce@momjian.us> Date: Tue, 15 Feb 2005 03:50:07 +0000 Subject: [PATCH] Update comment on VACUUM FULL. Manfred Koizar --- src/backend/commands/vacuum.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index cdfc02328d2..d0ccf310cc4 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -13,7 +13,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/vacuum.c,v 1.299 2004/12/31 21:59:42 pgsql Exp $ + * $PostgreSQL: pgsql/src/backend/commands/vacuum.c,v 1.300 2005/02/15 03:50:07 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -1703,20 +1703,25 @@ repair_frag(VRelStats *vacrelstats, Relation onerel, tuple_len = tuple.t_len = ItemIdGetLength(itemid); ItemPointerSet(&(tuple.t_self), blkno, offnum); - /* + /* --- * VACUUM FULL has an exclusive lock on the relation. So * normally no other transaction can have pending INSERTs or - * DELETEs in this relation. A tuple is either (a) a tuple in - * a system catalog, inserted or deleted by a not yet - * committed transaction or (b) dead (XMIN_INVALID or - * XMAX_COMMITTED) or (c) inserted by a committed xact - * (XMIN_COMMITTED) or (d) moved by the currently running - * VACUUM. In case (a) we wouldn't be in repair_frag() at all. + * DELETEs in this relation. A tuple is either: + * (a) a tuple in a system catalog, inserted or deleted + * by a not yet committed transaction + * (b) known dead (XMIN_INVALID, or XMAX_COMMITTED and xmax + * is visible to all active transactions) + * (c) inserted by a committed xact (XMIN_COMMITTED) + * (d) moved by the currently running VACUUM. + * (e) deleted (XMAX_COMMITTED) but at least one active + * transaction does not see the deleting transaction + * In case (a) we wouldn't be in repair_frag() at all. * In case (b) we cannot be here, because scan_heap() has * already marked the item as unused, see continue above. Case * (c) is what normally is to be expected. Case (d) is only * possible, if a whole tuple chain has been moved while * processing this or a higher numbered block. + * --- */ if (!(tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED)) { -- GitLab