mirror of
https://github.com/postgres/postgres.git
synced 2025-07-15 19:21:59 +03:00
Fix interaction between CREATE INDEX and "snapshot too old".
Since indexes are created without valid LSNs, an index created while a snapshot older than old_snapshot_threshold existed could cause queries to return incorrect results when those old snapshots were used, if any relevant rows had been subject to early pruning before the index was built. Prevent usage of a newly created index until all such snapshots are released, for relations where this can happen. Questions about the interaction of "snapshot too old" with index creation were initially raised by Andres Freund. Reviewed by Robert Haas.
This commit is contained in:
@ -1596,10 +1596,7 @@ TransactionIdLimitedForOldSnapshots(TransactionId recentXmin,
|
||||
{
|
||||
if (TransactionIdIsNormal(recentXmin)
|
||||
&& old_snapshot_threshold >= 0
|
||||
&& RelationNeedsWAL(relation)
|
||||
&& !IsCatalogRelation(relation)
|
||||
&& !RelationIsAccessibleInLogicalDecoding(relation)
|
||||
&& !RelationHasUnloggedIndex(relation))
|
||||
&& RelationAllowsEarlyPruning(relation))
|
||||
{
|
||||
int64 ts = GetSnapshotCurrentTimestamp();
|
||||
TransactionId xlimit = recentXmin;
|
||||
|
Reference in New Issue
Block a user