Back-patch fcff8a575198478023ada8a48e13b50f70054766 as a bug fix.
Kevin Grittner <kgrittn@postgresql.org>
Back-patch fcff8a575198478023ada8a48e13b50f70054766 as a bug fix. When there is both a serialization failure and a unique violation, throw the former rather than the latter. When initially pushed, this was viewed as a feature to assist application framework developers, so that they could more accurately determine when to retry a failed transaction, but a test case presented by Ian Jackson has shown that this patch can prevent serialization anomalies in some cases where a unique violation is caught within a subtransaction, the work of that subtransaction is discarded, and no error is thrown. That makes this a bug fix, so it is being back-patched to all supported branches where it is not already present (i.e., 9.2 to 9.5). Discussion: https://postgr.es/m/1481307991-16971-1-git-send-email-ian.jackson@eu.citrix.com Discussion: https://postgr.es/m/22607.56276.807567.924144@mariner.uk.xensource.com
Files
| Path | Change | +/− |
|---|---|---|
| doc/src/sgml/mvcc.sgml | modified | +28 −7 |
| src/backend/access/nbtree/nbtinsert.c | modified | +8 −0 |
| src/test/isolation/expected/read-write-unique-2.out | added | +29 −0 |
| src/test/isolation/expected/read-write-unique-3.out | added | +12 −0 |
| src/test/isolation/expected/read-write-unique-4.out | added | +41 −0 |
| src/test/isolation/expected/read-write-unique.out | added | +29 −0 |
| src/test/isolation/isolation_schedule | modified | +4 −0 |
| src/test/isolation/specs/read-write-unique-2.spec | added | +36 −0 |
| src/test/isolation/specs/read-write-unique-3.spec | added | +33 −0 |
| src/test/isolation/specs/read-write-unique-4.spec | added | +48 −0 |
| src/test/isolation/specs/read-write-unique.spec | added | +39 −0 |
Discussion
- [OSSTEST PATCH 0/1] PostgreSQL db: Retry on constraint violation 36 messages · 2016-12-09 → 2016-12-16