Re: Want to acquire lock on tables where primary of one table is foreign key on othere

From: Alban Hertroys <haramrae(at)gmail(dot)com>
To: Abhishek Tripathi <postforabhishek(at)gmail(dot)com>
Cc: Postgres General <pgsql-general(at)postgresql(dot)org>
Subject: Re: Want to acquire lock on tables where primary of one table is foreign key on othere
Date: 2018-10-12 06:37:42
Message-ID: B2684922-8E24-4CE4-ABF4-4B0487929035@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-general

You forgot to CC the list. Also, top-posting is generally not appreciated here.

> On Thu, Oct 11, 2018 at 8:26 PM Alban Hertroys <haramrae(at)gmail(dot)com> wrote:
> On Thu, 11 Oct 2018 at 16:38, Abhishek Tripathi
> <postforabhishek(at)gmail(dot)com> wrote:
> > Actually I have acquired a "Select for Update" on a table whose id is refrence as a foreign key on another table So I want those table won't update until there is lock. Is it possible? Becuase postgres is acquiring lock but AccessShare Lock which allow to write on those table How I restrict this.
>
> For what purpose do you want that? What is inadequate about the lock
> that Postgres acquires?
>
> Table locks are very rarely what you want, as it blocks all concurrent
> access to the entire table, while that is only necessary for a few
> rarely used corner cases; a foreign key update is not among those.

> On Fri, Oct 12, 2018 at 10:33 AM Abhishek Tripathi <postforabhishek(at)gmail(dot)com> wrote:
> Thank you for your response.
>
> I am explaining my situation there is table A on which I have taken a row lock and the primary key of table A is related with table B as a foreign key so automatically I can not insert new row with that foreign key now the primary key of table B is used as foreign key in table C and insertion can be done on table C. I just want to lock table C also No insertion can be done on table C related to table B primary key.
>

> On 12 Oct 2018, at 8:08, Abhishek Tripathi <postforabhishek(at)gmail(dot)com> wrote:
>
> My bad sorry actually there is updation-
>
> there is table A on which I have taken a row lock and the primary key of table A is related with table B as a foreign key so automatically I can not insert new row with that foreign key on table B that is fine now table C any insertion can be done on table C. I just want to lock table C also No insertion can be done on table C becuse table C primary key is related to table B as a foreign key of B.

So your tables (simplified) are something like this?:
create table A (id primary key)
create table B (id primary key, a_id references A (id))
create table C (id primary key, b_id references B (id))

And you insert a new value for b_id in C? That's not possible, unless that value exists in table B, which in turn can't exist unless it's a_id exists in table A.
That's how foreign key constraints are designed, you don't need to do manual locking for that to work.

Alban Hertroys
--
If you can't see the forest for the trees,
cut the trees and you'll find there is no forest.

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message Kyotaro HORIGUCHI 2018-10-12 07:20:29 Re: BUG #15412: "invalid contrecord length" during WAL replica recovery
Previous Message Abhishek Tripathi 2018-10-12 05:03:03 Re: Want to acquire lock on tables where primary of one table is foreign key on othere

Browse pgsql-general by date

  From Date Subject
Next Message David Steele 2018-10-12 13:33:01 Re: Advice on logging strategy
Previous Message Abhishek Tripathi 2018-10-12 05:03:03 Re: Want to acquire lock on tables where primary of one table is foreign key on othere