Search Postgresql Archives

Re: [HACKERS] deadlock with truncate and foreing keys

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Stephan Szabo <sszabo@xxxxxxxxxxxxxxxxxxxxx> 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

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
       choose an index scan if your joining column's datatypes do not
       match

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux