Re: Crash on UPDATE in 7.0beta3

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Crash on UPDATE in 7.0beta3
Дата
Msg-id 3544.954696605@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: Crash on UPDATE in 7.0beta3  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
I said:
> ... But I don't
> understand why having other backends running concurrently would affect
> this.

Yes I do: this entire path of control is only invoked if ExecReplace
discovers that the tuple it's trying to update is already updated by
a concurrent transaction.  Evidently no one's tried running concurrent
UPDATEs where the updates use a nestloop+inner indexscan join plan,
because this path is certain to fail in that case.

Magnus, try swapping the code segments in ExecIndexReScan()
(executor/nodeIndexscan.c:341 ff) to become
   /* it's possible in subselects */   if (exprCtxt == NULL)       exprCtxt =
node->scan.scanstate->cstate.cs_ExprContext;
   node->scan.scanstate->cstate.cs_ExprContext->ecxt_outertuple = exprCtxt->ecxt_outertuple;
   /* If this is re-scanning of PlanQual ... */   if (estate->es_evTuple != NULL &&
estate->es_evTuple[node->scan.scanrelid- 1] != NULL)   {       estate->es_evTupleNull[node->scan.scanrelid - 1] =
false;      return;   }
 

and see if that makes things more reliable.

It looks like nodeTidscan has the same bug...
        regards, tom lane


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Crash on UPDATE in 7.0beta3
Следующее
От: Jeff MacDonald
Дата:
Сообщение: Re: Call for porting reports