aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2014-06-27 14:43:45 -0400
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2014-06-27 14:43:45 -0400
commite86cfc4bbe198f8c7367e8b23efadae97da64d7c (patch)
treecd22d325b1855d9e81d6df9805bf5f61110c20a5
parent5c538442a0a73b9d4f3fa11ecac6d5b93a982aca (diff)
downloadpostgresql-e86cfc4bbe198f8c7367e8b23efadae97da64d7c.tar.gz
postgresql-e86cfc4bbe198f8c7367e8b23efadae97da64d7c.zip
Don't allow relminmxid to go backwards during VACUUM FULL
We were allowing a table's pg_class.relminmxid value to move backwards when heaps were swapped by VACUUM FULL or CLUSTER. There is a similar protection against relfrozenxid going backwards, which we neglected to clone when the multixact stuff was rejiggered by commit 0ac5ad5134f276. Backpatch to 9.3, where relminmxid was introduced. As reported by Heikki in http://www.postgresql.org/message-id/52401AEA.9000608@vmware.com
-rw-r--r--src/backend/commands/cluster.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/backend/commands/cluster.c b/src/backend/commands/cluster.c
index 6f87170946c..46b41c17d21 100644
--- a/src/backend/commands/cluster.c
+++ b/src/backend/commands/cluster.c
@@ -873,6 +873,12 @@ copy_heap_data(Oid OIDNewHeap, Oid OIDOldHeap, Oid OIDOldIndex,
if (TransactionIdPrecedes(FreezeXid, OldHeap->rd_rel->relfrozenxid))
FreezeXid = OldHeap->rd_rel->relfrozenxid;
+ /*
+ * MultiXactCutoff, similarly, shouldn't go backwards either.
+ */
+ if (MultiXactIdPrecedes(MultiXactCutoff, OldHeap->rd_rel->relminmxid))
+ MultiXactCutoff = OldHeap->rd_rel->relminmxid;
+
/* return selected values to caller */
*pFreezeXid = FreezeXid;
*pCutoffMulti = MultiXactCutoff;