From: | HORDER Phil <Phil(dot)Horder(at)uk(dot)thalesgroup(dot)com> |
---|---|
To: | "pgsql-general(at)lists(dot)postgresql(dot)org" <pgsql-general(at)lists(dot)postgresql(dot)org> |
Subject: | Foreign Key locking / deadlock issue. |
Date: | 2018-03-20 11:46:21 |
Message-ID: | 9a2d4dc19e66413e9373652d2b618f81@XEXWIN0001.one-02-priv.grp |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Hi,
I'm trying to understand why I'm getting a deadlock issue, and how to work around it.
At base, I think the problem is:
1. Updates to a parent table are creating row level write locks,
2. updates to a child table set the foreign key value to the parent table, which are then blocked.
While investigating, I found the row locking documentation, which says that I can request read locks that don't block.
But my sample code still gets blocked.
https://www.postgresql.org/docs/9.6/static/explicit-locking.html
Can someone explain what I'm missing please?
parent process
-------------------
start transaction;
select * from pl where pl_id in (2,3) for no key update of pl; (1)
update pl set m_number = '234' where pl_id = 2; (2)
update pl set m_number = '345' where pl_id = 3; (3)
child process
-------------------
start transaction;
select pl_id from pl where pl_id in (2,3) for key share of pl; (4)
update eln set pl_id = 3 where event_id = 303; (5)
update eln set pl_id = 2 where event_id = 302; (6)
My Parent process inserts and updates on the PL table, but never changes the key value.
My Child process inserts and updates on the ELN table, and can set the FK reference value to the PL table.
I can understand that the default lock on the PL update will block the foreign key check from the ELN table.
Why does this example still get blocked?
Is there a way around this without dropping the foreign key?
(And if so.... How can I get this to work in Spring Data / JPA?)
Phil Horder
Database Mechanic
Thales
Land and Air Systems
Horizon House, Throop Road, Templecombe, Somerset, BA8 0DH, UK
From | Date | Subject | |
---|---|---|---|
Next Message | Adrian Klaver | 2018-03-20 13:29:06 | Re: COPY error when \. char |
Previous Message | Nicolas Paris | 2018-03-20 11:32:04 | COPY error when \. char |