diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2008-01-15 21:20:28 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2008-01-15 21:20:28 +0000 |
commit | 14e2a260a5187a1e83c6ec77f9db7fa5893e177e (patch) | |
tree | b7d2d2d704aa0953a7f7407c917c678cf63444f3 /src/backend/commands/cluster.c | |
parent | ac12412edec900fea429d5b9bf9e58990d9f4533 (diff) | |
download | postgresql-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.c | 9 |
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); |