Locking a row with KEY SHARE NOWAIT blocks

Поиск
Список
Период
Сортировка
От Heikki Linnakangas
Тема Locking a row with KEY SHARE NOWAIT blocks
Дата
Msg-id b75bd501-9690-738e-6393-0bdd1c881ba8@iki.fi
обсуждение исходный текст
Ответы Re: Locking a row with KEY SHARE NOWAIT blocks  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: Locking a row with KEY SHARE NOWAIT blocks  (Amit Kapila <amit.kapila16@gmail.com>)
Список pgsql-hackers
When you lock a row with FOR KEY SHARE, and the row's non-key columns 
have been updated, heap_lock_tuple() walks the update chain to mark all 
the in-progress tuple versions also as locked. But it doesn't pay 
attention to the NOWAIT or SKIP LOCKED flags when doing so. The 
heap_lock_updated_tuple() function walks the update chain, but the 
'wait_policy' argument is not passed to it. As a result, a SELECT in KEY 
SHARE NOWAIT query can block waiting for another updating transaction, 
despite the NOWAIT modifier.

This can be reproduced with the attached isolation test script.

I'm not sure how to fix this. The logic to walk the update chain and 
propagate the tuple lock is already breathtakingly complicated :-(.

- Heikki

Вложения

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

Предыдущее
От: Robert Haas
Дата:
Сообщение: Re: block-level incremental backup
Следующее
От: fn ln
Дата:
Сообщение: Re: BUG #15977: Inconsistent behavior in chained transactions