У меня есть простая инструкция выполнения, которая обновляется, если выполняется условие. Я понимаю, что тупик - это когда оба процесса A и B борются за одни и те же ресурсы, и оба они полагаются на другой, чтобы fini sh.
Однако у меня есть простой оператор UPDATE, и я не могу найти другой источник взаимоблокировки - но я был просто сбит с толку, как эта строка может вызвать оператор взаимоблокировки:
await self.bot.pg_con.execute("UPDATE gameusers SET raid_pass = raid_pass + 1 WHERE raid_pass < 10")
File "/home/debian/.local/lib/python3.7/site-packages/asyncpg/pool.py", line 518, in execute
return await con.execute(query, *args, timeout=timeout)
File "/home/debian/.local/lib/python3.7/site-packages/asyncpg/connection.py", line 272, in execute
return await self._protocol.query(query, timeout)
File "asyncpg/protocol/protocol.pyx", line 316, in query
asyncpg.exceptions.DeadlockDetectedError: deadlock detected
DETAIL: Process 24326 waits for ShareLock on transaction 75790925; blocked by process 24240.
Process 24240 waits for ShareLock on transaction 75790924; blocked by process 24326.
Как это может произойти в простом операторе UPDATE?
Спасибо за ваш время.