Re: Strange row locking - question

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Vaclav Kulakovsky <vaclav(dot)kulakovsky(at)definity(dot)cz>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: Strange row locking - question
Date: 2002-04-11 15:29:51
Message-ID: 1293.1018538991@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Vaclav Kulakovsky <vaclav(dot)kulakovsky(at)definity(dot)cz> writes:
> When I update row in table with foring key, referenced row is locked. I
> can see it in log file:

> DEBUG: query: update entry set sometext = 'aaa' where id = 1;
> DEBUG: query: SELECT 1 FROM ONLY "languages" WHERE "id" = $1 FOR UPDATE
> OF "languages"

> When I execute update second time I receive only this:

> query: update entry set sometext = 'aaa' where id = 1;

> Referenced row is locked only first time ? This behavior looks me little
> bit strange. Can anybody explain it ?

You are not seeing the RI query get *executed*, only get *parsed*.
After the first time through, the RI code re-uses a cached query plan.
Since it's not fed through the parser again, no log message.

plpgsql shows similar behavior, BTW. Some day it might be an idea to
make these things a little more debugging-friendly by having them emit
suitable log messages when they re-execute cached plans.

regards, tom lane

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Stephan Szabo 2002-04-11 15:35:34 Re: SPI_execp() failed in RI_FKey_cascade_del()
Previous Message Tom Lane 2002-04-11 14:41:21 Re: Multiply and Divide operators for geometry types