Thread: Query failed: ERROR: deadlock detected

Query failed: ERROR: deadlock detected

From
Aldor
Date:
PostgreSQL 8.0.3: Any idea what this is?

---
Warning: pg_query(): Query failed: ERROR:  deadlock detected
DETAIL:  Process 8835 waits for ShareLock on transaction 193588236;
blocked by process 8834.
Process 8834 waits for ShareLock on transaction 193588228; blocked by
process 8835
---

I have never seen such a log entry until now.


Re: Query failed: ERROR: deadlock detected

From
Oliver Elphick
Date:
On Mon, 2005-08-29 at 16:50 +0100, Aldor wrote:
> PostgreSQL 8.0.3: Any idea what this is?
>
> ---
> Warning: pg_query(): Query failed: ERROR:  deadlock detected
> DETAIL:  Process 8835 waits for ShareLock on transaction 193588236;
> blocked by process 8834.
> Process 8834 waits for ShareLock on transaction 193588228; blocked by
> process 8835
> ---
>
> I have never seen such a log entry until now.

You have two transactions locking each other out.

  For example:
    trans A:  begin;
    trans B:  begin;
    trans A:  select * from table_a for update;    -- locks table_a
    trans B:  select * from table_b for update;    -- locks table_b
    trans A:  select * from table_b for update;    -- blocked by trans B's lock
    trans B:  select * from table_a for update;    -- blocked by trans A's lock

Since the two transactions are blocking each other, the locks will never
be released by the transactions that are holding them.  After a preset
interval (about 1 second by default) a deadlock is detected and reported
with this error message and one of the transactions is aborted.

See manual section 12.3.3 in the 8.0 documentation.

--
Oliver Elphick                                          olly@lfix.co.uk
Isle of Wight                              http://www.lfix.co.uk/oliver
GPG: 1024D/A54310EA  92C8 39E7 280E 3631 3F0E  1EC0 5664 7A2F A543 10EA
                 ========================================
   Do you want to know God?   http://www.lfix.co.uk/knowing_god.html


Re: Query failed: ERROR: deadlock detected

From
Aldor
Date:
thanks for the explanation... i found the mistake in a new pl/pgsql
function i wrote before this error occured;-)

Oliver Elphick wrote:
> On Mon, 2005-08-29 at 16:50 +0100, Aldor wrote:
>
>>PostgreSQL 8.0.3: Any idea what this is?
>>
>>---
>>Warning: pg_query(): Query failed: ERROR:  deadlock detected
>>DETAIL:  Process 8835 waits for ShareLock on transaction 193588236;
>>blocked by process 8834.
>>Process 8834 waits for ShareLock on transaction 193588228; blocked by
>>process 8835
>>---
>>
>>I have never seen such a log entry until now.
>
>
> You have two transactions locking each other out.
>
>   For example:
>     trans A:  begin;
>     trans B:  begin;
>     trans A:  select * from table_a for update;    -- locks table_a
>     trans B:  select * from table_b for update;    -- locks table_b
>     trans A:  select * from table_b for update;    -- blocked by trans B's lock
>     trans B:  select * from table_a for update;    -- blocked by trans A's lock
>
> Since the two transactions are blocking each other, the locks will never
> be released by the transactions that are holding them.  After a preset
> interval (about 1 second by default) a deadlock is detected and reported
> with this error message and one of the transactions is aborted.
>
> See manual section 12.3.3 in the 8.0 documentation.
>