На днях поймали deadlock на блокировках в PostgreSQL и оказалась полезной эта статья - взял из неё запрос, который в удобном виде показывает, какие запросы какими запросами заблокированы
#postgresql
[eve] sandbox=# SELECT
COALESCE(blockingl.relation::regclass::text,blockingl.locktype) as locked_item,
blockeda.pid AS blocked_pid, blockeda.query as blocked_query,
blockedl.mode as blocked_mode, blockinga.pid AS blocking_pid,
blockinga.query as blocking_query, blockingl.mode as blocking_mode
FROM pg_catalog.pg_locks blockedl
JOIN pg_stat_activity blockeda ON blockedl.pid = blockeda.pid
JOIN pg_catalog.pg_locks blockingl ON(
( (blockingl.transactionid=blockedl.transactionid) OR
(blockingl.relation=blockedl.relation AND blockingl.locktype=blockedl.locktype)
) AND blockedl.pid != blockingl.pid)
JOIN pg_stat_activity blockinga ON blockingl.pid = blockinga.pid
WHERE NOT blockedl.granted
AND blockinga.datname='sandbox';
Ну и вообще статья хорошая - по шагам от простого сложного и с понятными примерами даёт неплохой экскурс в блокировки.#postgresql
Big-Elephants
Exploring Query Locks in Postgres - Big elephants
Understanding query locking is key to using postgres concurrently. So let’s look at an example to learn more about how locking works and how to …