aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/cluster.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2008-01-15 21:20:28 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2008-01-15 21:20:28 +0000
commit14e2a260a5187a1e83c6ec77f9db7fa5893e177e (patch)
treeb7d2d2d704aa0953a7f7407c917c678cf63444f3 /src/backend/commands/cluster.c
parentac12412edec900fea429d5b9bf9e58990d9f4533 (diff)
downloadpostgresql-14e2a260a5187a1e83c6ec77f9db7fa5893e177e.tar.gz
postgresql-14e2a260a5187a1e83c6ec77f9db7fa5893e177e.zip
Prevent CLUSTER from decreasing a relation's relfrozenxid. Bug
introduced in rewrite to make CLUSTER MVCC-safe.
Diffstat (limited to 'src/backend/commands/cluster.c')
-rw-r--r--src/backend/commands/cluster.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c
index 5176e8d6ace..a2a94f1e826 100644
--- a/src/backend/commands/cluster.c
+++ b/src/backend/commands/cluster.c
@@ -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);