Is there some way to determine the specific relation involved when a deadlock 
occurs?  For example in the following error message (with log level set to 
verbose):
2004-07-03 20:30:44 [21347] ERROR:  40P01: deadlock detected
DETAIL:  Process 21347 waits for ShareLock on transaction 104411804; blocked 
by process 21315. Process 21315 waits for ShareLock on transaction 104411808; 
blocked by process 21347.
LOCATION:  DeadLockReport, deadlock.c:888
STATEMENT:  INSERT INTO <snip>

It tells me the transaction id's and process id's involved, but I see no way 
to determine which specific relations were involved (the table being inserted 
into has several different rules/triggers that touch other tables)   Since 
the error happens infrequently and randomly, the above information is 
outdated by the time I can investigate. I am also skeptical about the message 
that it was trying to get ShareLock since afaik share lock level is only used 
when creating indexes.   I have thought about turning on some of the GUC's 
like trace_locks or debug_deadlocks, but the docs are very ambiguous as to 
what these items do specifically .  Is there some other option I have missed 
out on?  

Robert Treat
-- 
Build A Brighter Lamp :: Linux Apache {middleware} PostgreSQL

Tue, 6 Jul 2004 11:38:03 -0400
Robert Treat <xzilla@users.sourceforge.net>
investigating deadlocks