mirror of
https://github.com/postgres/postgres.git
synced 2025-11-24 00:23:06 +03:00
The row-version chaining in Serializable Snapshot Isolation was still wrong.
On further analysis, it turns out that it is not needed to duplicate predicate locks to the new row version at update, the lock on the version that the transaction saw as visible is enough. However, there was a different bug in the code that checks for dangerous structures when a new rw-conflict happens. Fix that bug, and remove all the row-version chaining related code. Kevin Grittner & Dan Ports, with some comment editorialization by me.
This commit is contained in:
@@ -47,7 +47,6 @@ extern void RegisterPredicateLockingXid(const TransactionId xid);
|
||||
extern void PredicateLockRelation(const Relation relation);
|
||||
extern void PredicateLockPage(const Relation relation, const BlockNumber blkno);
|
||||
extern void PredicateLockTuple(const Relation relation, const HeapTuple tuple);
|
||||
extern void PredicateLockTupleRowVersionLink(const Relation relation, const HeapTuple oldTuple, const HeapTuple newTuple);
|
||||
extern void PredicateLockPageSplit(const Relation relation, const BlockNumber oldblkno, const BlockNumber newblkno);
|
||||
extern void PredicateLockPageCombine(const Relation relation, const BlockNumber oldblkno, const BlockNumber newblkno);
|
||||
extern void ReleasePredicateLocks(const bool isCommit);
|
||||
|
||||
Reference in New Issue
Block a user