mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-06 15:24:56 +08:00
Avoid special XID snapshotConflictHorizon values.
Don't allow VACUUM to WAL-log the value FrozenTransactionId as the snapshotConflictHorizon of freezing or visibility map related WAL records. The only special XID value that's an allowable snapshotConflictHorizon is InvalidTransactionId, which is interpreted as "record definitely doesn't require a recovery conflict". Author: Peter Geoghegan <pg@bowt.ie> Discussion: https://postgr.es/m/CAH2-WznuNGSzF8v6OsgjaC5aYsb3cZ6HW6MLm30X0d65cmSH6A@mail.gmail.com
This commit is contained in:
parent
1fd3dd2048
commit
6daeeb1f91
@ -1698,7 +1698,8 @@ retry:
|
||||
}
|
||||
|
||||
/* Track newest xmin on page. */
|
||||
if (TransactionIdFollows(xmin, prunestate->visibility_cutoff_xid))
|
||||
if (TransactionIdFollows(xmin, prunestate->visibility_cutoff_xid) &&
|
||||
TransactionIdIsNormal(xmin))
|
||||
prunestate->visibility_cutoff_xid = xmin;
|
||||
}
|
||||
break;
|
||||
@ -1863,7 +1864,7 @@ retry:
|
||||
* because visibility_cutoff_xid will be logged by our caller in a
|
||||
* moment.
|
||||
*/
|
||||
Assert(cutoff == FrozenTransactionId ||
|
||||
Assert(!TransactionIdIsValid(cutoff) ||
|
||||
cutoff == prunestate->visibility_cutoff_xid);
|
||||
}
|
||||
#endif
|
||||
@ -3293,7 +3294,8 @@ heap_page_is_all_visible(LVRelState *vacrel, Buffer buf,
|
||||
}
|
||||
|
||||
/* Track newest xmin on page. */
|
||||
if (TransactionIdFollows(xmin, *visibility_cutoff_xid))
|
||||
if (TransactionIdFollows(xmin, *visibility_cutoff_xid) &&
|
||||
TransactionIdIsNormal(xmin))
|
||||
*visibility_cutoff_xid = xmin;
|
||||
|
||||
/* Check whether this tuple is already frozen or not */
|
||||
|
@ -493,6 +493,7 @@ ResolveRecoveryConflictWithSnapshot(TransactionId snapshotConflictHorizon,
|
||||
if (!TransactionIdIsValid(snapshotConflictHorizon))
|
||||
return;
|
||||
|
||||
Assert(TransactionIdIsNormal(snapshotConflictHorizon));
|
||||
backends = GetConflictingVirtualXIDs(snapshotConflictHorizon,
|
||||
locator.dbOid);
|
||||
ResolveRecoveryConflictWithVirtualXIDs(backends,
|
||||
|
Loading…
Reference in New Issue
Block a user