From: | HORDER Phil <Phil(dot)Horder(at)uk(dot)thalesgroup(dot)com> |
---|---|
To: | pgsql-general <pgsql-general(at)postgresql(dot)org> |
Subject: | RE: Foreign Key locking / deadlock issue.... v2 |
Date: | 2018-03-22 11:27:42 |
Message-ID: | 58cedd8d051e40bb887b4a19941b9e5b@XEXWIN0001.one-02-priv.grp |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Thanks Rob,
The security policy in the example was reduced to the bare minimum, to demonstrate the issue was with the existence of the policy, not what it did.
Obviously my real-application policy does much more, and uses other columns to do both read & write checks.
Adding the write check as suggested makes no difference to the demo - the blocking lock still occurs.
Phil Horder
Database Mechanic
-----Original Message-----
From: rob stone [mailto:floriparob(at)gmail(dot)com]
Sent: 22 March 2018 11:11
To: HORDER Phil; Adrian Klaver
Cc: pgsql-general
Subject: Re: Foreign Key locking / deadlock issue.... v2
Hello Phil,
On Wed, 2018-03-21 at 15:26 +0000, HORDER Phil wrote:
> OK,
> Let's try again, with a full script, and including the bit that makes
> the difference…
>
> 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 – because there is Row Level
> Security on the parent table.
>
>
>
> -- The setup
> ------------
>
> drop table if exists ELN;
> drop table if exists PL;
>
> Create table PL
> (pl_id integer,
> m_number text
> );
>
>
> alter table PL ENABLE row level security; alter table PL FORCE row
> level security;
>
> -- A dummy security policy, that allows everybody access to everything
> drop policy if exists security_policy on PL ;
I don't use row level security but after reading the documentation, I'd alter this:-
> create policy security_policy on PL TO public using (true); -- (1)
to
CREATE POLICY security_policy on PL FOR ALL TO PUBLIC USING (true) WITH CHECK (true);
and trying again.
HTH,
Rob
From | Date | Subject | |
---|---|---|---|
Next Message | Steven Hirsch | 2018-03-22 11:53:49 | Re: Introducing brand-new dbForge Studio for PostgreSQL, a powerful IDE for working with PostgreSQL databases |
Previous Message | rob stone | 2018-03-22 11:11:03 | Re: Foreign Key locking / deadlock issue.... v2 |