Re: [HACKERS] deadlock with truncate and foreing keys - Mailing list pgsql-general

From Tom Lane
Subject Re: [HACKERS] deadlock with truncate and foreing keys
Date
Msg-id 2077.1203371884@sss.pgh.pa.us
Whole thread Raw
In response to Re: [HACKERS] deadlock with truncate and foreing keys  (Stephan Szabo <sszabo@megazone.bigpanda.com>)
List pgsql-general
Stephan Szabo <sszabo@megazone.bigpanda.com> writes:
> On Mon, 18 Feb 2008, Tom Lane wrote:
>> but right offhand I see no reason for it to do so --- it doesn't
>> *do* anything with fk_rel except close it again.  Likewise
>> RI_FKey_keyequal_upd_fk doesn't seem to really need to touch the
>> pk_rel.  Is there something I'm missing in that?  Maybe this is
>> a vestige of earlier coding that did need to touch both rels
>> to perform the keysequal check?

> Probably something like that - maybe ri_BuildQueryKeyFull might have
> needed it open.

Yeah, looking back at 8.2 and earlier confirms this --- it used to need
access to the rel in order to interpret the trigger arguments
(specifically, convert column names to numbers).  In the 8.3 rewrite
that got rid of the trigger arguments, I removed the no-longer-needed
Relation arguments to ri_BuildQueryKeyFull, but didn't take the next
step of not opening the relation where it wasn't being used otherwise.

I was thinking there might be some arcane locking reason for transiently
locking the other table, but I can't imagine what it would be.  We have
a writer's lock on the table we are modifying, and that is sufficient to
ensure that the RI constraint isn't changing, so ...

> Actually, I'm wondering if the ri_BuildQueryKeyFull call
> is also unnecessary now - I don't think we ever use the qkey that comes
> out of it unless I'm missing some code.

Good point --- ri_KeysEqual only needs the RI_ConstraintInfo not the
qkey.  In 8.2 and before it used the qkey to get the info.

In short, this is easy to improve in HEAD and 8.3, but not so readily
fixable in prior releases.  I'll go make it so.

            regards, tom lane

pgsql-general by date:

Previous
From: Stephan Szabo
Date:
Subject: Re: [HACKERS] deadlock with truncate and foreing keys
Next
From: Alvaro Herrera
Date:
Subject: Re: SPI-functions and transaction control