Comment détecter une requête qui détient le verrou dans Postgres?

Je souhaite suivre mutuelle verrous dans postgres constamment.

Je suis tombé sur Serrures De Surveillance article et essayé d'exécuter la requête suivante:

SELECT bl.pid     AS blocked_pid,
     a.usename  AS blocked_user,
     kl.pid     AS blocking_pid,
     ka.usename AS blocking_user,
     a.query    AS blocked_statement
FROM  pg_catalog.pg_locks         bl
 JOIN pg_catalog.pg_stat_activity a  ON a.pid = bl.pid
 JOIN pg_catalog.pg_locks         kl ON kl.transactionid = bl.transactionid AND kl.pid != bl.pid
 JOIN pg_catalog.pg_stat_activity ka ON ka.pid = kl.pid
WHERE NOT bl.granted;

Malheureusement, il ne revient jamais non-jeu de résultats vide. Si je simplifie requête donnée à la forme suivante:

SELECT bl.pid     AS blocked_pid,
     a.usename  AS blocked_user,
     a.query    AS blocked_statement
FROM  pg_catalog.pg_locks         bl
 JOIN pg_catalog.pg_stat_activity a  ON a.pid = bl.pid
WHERE NOT bl.granted;

ensuite, il retourne les requêtes qui sont en attente pour acquérir un verrou. Mais je n'arrive pas à le modifier de sorte qu'il peut renvoyer à la fois bloqué et bloquant les requêtes.

Des idées?

source d'informationauteur Roman