aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/parse_utilcmd.c
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2017-07-26 17:24:16 -0400
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2017-07-26 17:24:16 -0400
commit8c348765f95e97a9a7774467c744a33da21206fd (patch)
tree02a855de1f55d0e05e5e58d5cb6a344cad8cef9c /src/backend/parser/parse_utilcmd.c
parent3b7bbee7b661536713df3f6c93a8f446bdbfd0ae (diff)
downloadpostgresql-8c348765f95e97a9a7774467c744a33da21206fd.tar.gz
postgresql-8c348765f95e97a9a7774467c744a33da21206fd.zip
Fix concurrent locking of tuple update chain
If several sessions are concurrently locking a tuple update chain with nonconflicting lock modes using an old snapshot, and they all succeed, it may happen that some of them fail because of restarting the loop (due to a concurrent Xmax change) and getting an error in the subsequent pass while trying to obtain a tuple lock that they already have in some tuple version. This can only happen with very high concurrency (where a row is being both updated and FK-checked by multiple transactions concurrently), but it's been observed in the field and can have unpleasant consequences such as an FK check failing to see a tuple that definitely exists: ERROR: insert or update on table "child_table" violates foreign key constraint "fk_constraint_name" DETAIL: Key (keyid)=(123456) is not present in table "parent_table". (where the key is observably present in the table). Discussion: https://postgr.es/m/20170714210011.r25mrff4nxjhmf3g@alvherre.pgsql
Diffstat (limited to 'src/backend/parser/parse_utilcmd.c')
0 files changed, 0 insertions, 0 deletions