ITAGAKI Takahiro wrote: > I wrote a small patch to log conflicted queries. > With my patch, deadlock message will change as following: > > | ERROR: deadlock detected > | DETAIL: Process 3468 waits for ShareLock on transaction 451; blocked by > process 4068. > | STATEMENT: UPDATE test SET i = i WHERE i = 1; <- ***conflicted > query*** > | Process 4068 waits for ShareLock on transaction 450; blocked by > process 3468. > | STATEMENT: UPDATE test SET i = i WHERE i = 2;
Cute. > There are some open issues. One of the issues is that the killed query is > logged by log_min_error_statement, but conflicted query is logged in DETAIL. > Killed query is logged only on server but conflicted queries are > sent to both server and client. In addition, if log_min_error_statement > is less than ERROR level, only the conflicted queries are logged. > -- it's inconsistent and unsymmetric. Perhaps it could be shown in CONTEXT, like so: | ERROR: deadlock detected | DETAIL: Process 3468 waits for ShareLock on transaction 451; blocked by process 4068. | Process 4068 waits for ShareLock on transaction 450; blocked by process 3468. | STATEMENT: UPDATE test SET i = i WHERE i = 2; | CONTEXT: process 3468: UPDATE test SET i = i WHERE i = 1; I think it's useful to show the PID of each statement, for the case where there are more than two processes deadlocked. -- Alvaro Herrera http://www.CommandPrompt.com/ The PostgreSQL Company - Command Prompt, Inc. ---------------------------(end of broadcast)--------------------------- TIP 1: if posting/reading through Usenet, please send an appropriate subscribe-nomail command to [EMAIL PROTECTED] so that your message can get through to the mailing list cleanly