Re: Concurrency bug in UPDATE of partition-key
От | Amit Kapila |
---|---|
Тема | Re: Concurrency bug in UPDATE of partition-key |
Дата | |
Msg-id | CAA4eK1LHOhXv0n+m0ktjgxGCbaTEoUEYrgn=8Rm1NQQ-_a+qnA@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Concurrency bug in UPDATE of partition-key (Amit Khandekar <amitdkhan.pg@gmail.com>) |
Ответы |
Re: Concurrency bug in UPDATE of partition-key
|
Список | pgsql-hackers |
On Thu, Jun 7, 2018 at 1:53 PM, Amit Khandekar <amitdkhan.pg@gmail.com> wrote: > On 7 June 2018 at 11:44, Amit Kapila <amit.kapila16@gmail.com> wrote: >> On Tue, Jun 5, 2018 at 8:03 PM, Amit Khandekar <amitdkhan.pg@gmail.com> >> wrote: >> >> I think this will allow before row delete triggers to be fired more than >> once. Normally, if the EvalPlanQual testing generates a new tuple, we don't >> fire the triggers again. > > If there are BR delete triggers, the tuple will be locked using > GetTupleForTrigger(). So the subsequent EvalPlanQual testing won't be > run, since the tuple is already locked due to triggers having run. > > But that leads me to think : The same concurrency issue can occur in > GetTupleForTrigger() also. Say, a concurrent session has already > locked the tuple, and GetTupleForTrigger() would wait and then return > the updated tuple in its last parameter newSlot. In that case, we need > to pass this slot back through ExecBRDeleteTriggers(), and further > through epqslot parameter of ExecDelete(). But yes, in this case, we > should avoid calling this trigger function the second time. > > If you agree on the above, I will send an updated patch. > Sounds reasonable to me. -- With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com
В списке pgsql-hackers по дате отправления: