- Notifications
You must be signed in to change notification settings - Fork5
Commitcdf91ed
committed
Fix serializable mode with index-only scans.
Serializable Snapshot Isolation used for serializable transactionsdepends on acquiring SIRead locks on all heap relation tuples whichare used to generate the query result, so that a later delete orupdate of any of the tuples can flag a read-write conflict betweentransactions. This is normally handled in heapam.c, with tuple levellocking. Since an index-only scan avoids heap access in many cases,building the result from the index tuple, the necessary predicatelocks were not being acquired for all tuples in an index-only scan.To prevent problems with tuple IDs which are vacuumed and re-usedwhile the transaction still matters, the xmin of the tuple is part ofthe tag for the tuple lock. Since xmin is not available to theindex-only scan for result rows generated from the index tuples, itis not possible to acquire a tuple-level predicate lock in suchcases, in spite of having the tid. If we went to the heap to get thexmin value, it would no longer be an index-only scan. Rather thanprohibit index-only scans under serializable transaction isolation,we acquire an SIRead lock on the page containing the tuple, when itwas not necessary to visit the heap for other reasons.Backpatch to 9.2.Kevin Grittner and Tom Lane1 parentc63f309 commitcdf91ed
File tree
4 files changed
+103
-1
lines changed- src
- backend/executor
- test/isolation
- expected
- specs
4 files changed
+103
-1
lines changedLines changed: 15 additions & 1 deletion
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
30 | 30 |
| |
31 | 31 |
| |
32 | 32 |
| |
| 33 | + | |
33 | 34 |
| |
34 | 35 |
| |
35 | 36 |
| |
| |||
52 | 53 |
| |
53 | 54 |
| |
54 | 55 |
| |
55 |
| - | |
56 | 56 |
| |
57 | 57 |
| |
58 | 58 |
| |
| |||
78 | 78 |
| |
79 | 79 |
| |
80 | 80 |
| |
| 81 | + | |
| 82 | + | |
81 | 83 |
| |
82 | 84 |
| |
83 | 85 |
| |
| |||
147 | 149 |
| |
148 | 150 |
| |
149 | 151 |
| |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
150 | 164 |
| |
151 | 165 |
| |
152 | 166 |
| |
|
Lines changed: 41 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + |
Lines changed: 1 addition & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
9 | 9 |
| |
10 | 10 |
| |
11 | 11 |
| |
| 12 | + | |
12 | 13 |
| |
13 | 14 |
| |
14 | 15 |
| |
|
Lines changed: 46 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + |
0 commit comments
Comments
(0)