Re: Strange deadlock in foreign key check

From: Sophia Wright <sjw9010(at)gmail(dot)com>
To: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: Strange deadlock in foreign key check
Date: 2015-08-06 16:29:36
Message-ID: CAJTwwh17kwdjYRpq4SQBJOdMmOmiez4sP5tgax1Lh_0eg6nhJg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Fri, Aug 7, 2015 at 1:11 AM, Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
wrote:

> Sophia Wright wrote:
> > I am seeing some odd locking behaviour when deleting a parent record
> > (Postgres 9.4.4).
>
> Somewhere in the triggers for FK checks we do "SELECT FOR KEY SHARE" of
> the PK tuples when the FK tuples are altered; and conversely when we
> remove tuples from the PK side we need to ensure that there are no
> referencing tuples in the FK side. The code doesn't distinguish between
> indexes used in foreign keys from other indexes that *could* be used in
> foreign keys. Therefore your UNIQUE in the declaration for "x" may be
> making it difficult for you. I don't have the time to go through this
> right now, but please try and see what happens if you remove the UNIQUE
> from that column.
>
> We discussed about only considering indexes actually referenced by
> foreign keys instead of all of them, but there are some fine points to
> keep in mind if you do that, so we never got around to implementing that
> optimization. I don't have any immediate suggestion for what to do to
> work around this issue.
>

Thanks. Removing the UNIQUE constraint prevents this, but I'm still not
clear on why it happens...

Based on your explanation, I can see how a UNIQUE index on the PK side
would cause problems. But on the FK side, I'm not sure where this fits in.
Why lock the UNIQUE field, but not lock the FK field itself? Isn't it the
only part that's relevant here?

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Luca Ferrari 2015-08-06 16:31:49 Re: Oracle baseline/baseplan/outplan in Postgres
Previous Message Alvaro Herrera 2015-08-06 15:11:35 Re: Strange deadlock in foreign key check