]> granicus.if.org Git - postgresql/commitdiff
Prevent CLUSTER from decreasing a relation's relfrozenxid. Bug
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 15 Jan 2008 21:20:28 +0000 (21:20 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 15 Jan 2008 21:20:28 +0000 (21:20 +0000)
introduced in rewrite to make CLUSTER MVCC-safe.

src/backend/commands/cluster.c

index 5176e8d6ace37133972094c9ab417dcb484ff88d..a2a94f1e826f00d788e7f493d38ed978f6790f89 100644 (file)
@@ -11,7 +11,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.167 2008/01/02 23:34:42 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/commands/cluster.c,v 1.168 2008/01/15 21:20:28 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -751,6 +751,13 @@ copy_heap_data(Oid OIDNewHeap, Oid OIDOldHeap, Oid OIDOldIndex)
        vacuum_set_xid_limits(-1, OldHeap->rd_rel->relisshared,
                                                  &OldestXmin, &FreezeXid);
 
+       /*
+        * FreezeXid will become the table's new relfrozenxid, and that mustn't
+        * go backwards, so take the max.
+        */
+       if (TransactionIdPrecedes(FreezeXid, OldHeap->rd_rel->relfrozenxid))
+               FreezeXid = OldHeap->rd_rel->relfrozenxid;
+
        /* Initialize the rewrite operation */
        rwstate = begin_heap_rewrite(NewHeap, OldestXmin, FreezeXid, use_wal);