diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2014-06-27 14:43:45 -0400 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2014-06-27 14:43:45 -0400 |
commit | e86cfc4bbe198f8c7367e8b23efadae97da64d7c (patch) | |
tree | cd22d325b1855d9e81d6df9805bf5f61110c20a5 | |
parent | 5c538442a0a73b9d4f3fa11ecac6d5b93a982aca (diff) | |
download | postgresql-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.c | 6 |
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; |