mirror of
https://github.com/postgres/postgres.git
synced 2025-06-17 17:02:08 +03:00
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
0ac5ad5134
.
Backpatch to 9.3, where relminmxid was introduced.
As reported by Heikki in
http://www.postgresql.org/message-id/52401AEA.9000608@vmware.com
This commit is contained in:
@ -861,6 +861,12 @@ copy_heap_data(Oid OIDNewHeap, Oid OIDOldHeap, Oid OIDOldIndex, bool verbose,
|
|||||||
if (TransactionIdPrecedes(FreezeXid, OldHeap->rd_rel->relfrozenxid))
|
if (TransactionIdPrecedes(FreezeXid, OldHeap->rd_rel->relfrozenxid))
|
||||||
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 */
|
/* return selected values to caller */
|
||||||
*pFreezeXid = FreezeXid;
|
*pFreezeXid = FreezeXid;
|
||||||
*pCutoffMulti = MultiXactCutoff;
|
*pCutoffMulti = MultiXactCutoff;
|
||||||
|
Reference in New Issue
Block a user