Commit 3110cd23 authored by Bruce Momjian's avatar Bruce Momjian

Update comment on VACUUM FULL.

Manfred Koizar
parent b39ce1cc
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
* *
* *
* IDENTIFICATION * 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, ...@@ -1703,20 +1703,25 @@ repair_frag(VRelStats *vacrelstats, Relation onerel,
tuple_len = tuple.t_len = ItemIdGetLength(itemid); tuple_len = tuple.t_len = ItemIdGetLength(itemid);
ItemPointerSet(&(tuple.t_self), blkno, offnum); ItemPointerSet(&(tuple.t_self), blkno, offnum);
/* /* ---
* VACUUM FULL has an exclusive lock on the relation. So * VACUUM FULL has an exclusive lock on the relation. So
* normally no other transaction can have pending INSERTs or * normally no other transaction can have pending INSERTs or
* DELETEs in this relation. A tuple is either (a) a tuple in * DELETEs in this relation. A tuple is either:
* a system catalog, inserted or deleted by a not yet * (a) a tuple in a system catalog, inserted or deleted
* committed transaction or (b) dead (XMIN_INVALID or * by a not yet committed transaction
* XMAX_COMMITTED) or (c) inserted by a committed xact * (b) known dead (XMIN_INVALID, or XMAX_COMMITTED and xmax
* (XMIN_COMMITTED) or (d) moved by the currently running * is visible to all active transactions)
* VACUUM. In case (a) we wouldn't be in repair_frag() at all. * (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 * In case (b) we cannot be here, because scan_heap() has
* already marked the item as unused, see continue above. Case * already marked the item as unused, see continue above. Case
* (c) is what normally is to be expected. Case (d) is only * (c) is what normally is to be expected. Case (d) is only
* possible, if a whole tuple chain has been moved while * possible, if a whole tuple chain has been moved while
* processing this or a higher numbered block. * processing this or a higher numbered block.
* ---
*/ */
if (!(tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED)) if (!(tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED))
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment