[COMMITTERS] pgsql: Fix concurrent locking of tuple update chain

Поиск
Список
Период
Сортировка
От Alvaro Herrera
Тема [COMMITTERS] pgsql: Fix concurrent locking of tuple update chain
Дата
Msg-id E1daTq2-0006US-Q7@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
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

Branch
------
REL9_6_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/8c348765f95e97a9a7774467c744a33da21206fd

Modified Files
--------------
src/backend/access/heap/heapam.c | 41 ++++++++++++++++++++++++++++++++++++----
1 file changed, 37 insertions(+), 4 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: [COMMITTERS] pgsql: Remove obsolete comments about functional dependencies
Следующее
От: Alvaro Herrera
Дата:
Сообщение: [COMMITTERS] pgsql: Update copyright in recently added files