приветствую. не могу разгадать загадку, буду благодарен за помощь
итак, есть два запроса к одной и той же таблице, оба запроса делают select ... order by id asc for update. в результате одновременного выполнения запросов получаю дэдлок.
отличаются эти запросы условием. в одном where id in (...), во втором where user_id in (...)
explain выдает на первый запрос вот что
QUERY PLAN
LockRows (cost=0.42..25.35 rows=3 width=26) (actual time=4.446..5.036 rows=3 loops=1)
-> Index Scan using availability_availabilityqueue_pkey on availability_availabilityqueue (cost=0.42..25.32 rows=3 width=26) (actual time=4.401..4.974 rows=3 loops=1)
Index Cond: (id = ANY ('{fffff3e0-0c09-40cb-9cc0-29d79f557fa4,ffffb9f7-d2f9-4695-b448-dfee8b904bd7,ffffb151-a171-4803-a08d-fe618c9f9b26}'::uuid[]))
Planning Time: 0.128 ms
Execution Time: 5.057 ms
кусок эксплейна второго запроса
QUERY PLAN
LockRows (cost=5638.39..5666.69 rows=2264 width=26) (actual time=5.034..5.036 rows=0 loops=1)
-> Sort (cost=5638.39..5644.05 rows=2264 width=26) (actual time=5.033..5.035 rows=0 loops=1)
Sort Key: id
Sort Method: quicksort Memory: 25kB
...
в обычной ситуации причиной дедлока является отсутствие сортировки (ну или различные сортировки). тут же сортировка указана. но у одного из запросов отсутствует в explain. это несколько смущает...