Re: Bugs/slowness inserting and indexing cubes

Поиск
Список
Период
Сортировка
От Alexander Korotkov
Тема Re: Bugs/slowness inserting and indexing cubes
Дата
Msg-id CAPpHfduSW5QZGWOE+-Zoe_rQTBTM28xtD3eu9KOyKEuCqWr70Q@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Bugs/slowness inserting and indexing cubes  (Alexander Korotkov <aekorotkov@gmail.com>)
Ответы Re: Bugs/slowness inserting and indexing cubes  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
ITSM, I found the problem. This piece of code is triggering an error. It assumes each page of corresponding to have initialized buffer. That should be true because we're inserting index tuples from up to down while splits propagate from down to up.

if (!found)
{
/*
* Node buffer should exist at this point. If it didn't exist before,
* the insertion that caused the page to split should've created it.
*/
elog(ERROR, "node buffer of page being split (%u) does not exist",
blocknum);
}

But this assumptions becomes false we turn buffer off in the root page. So, root page can produce pages without initialized buffers when splits.

/*
 * Does specified level have buffers? (Beware of multiple evaluation of
 * arguments.)
 */
#define LEVEL_HAS_BUFFERS(nlevel, gfbb) \
((nlevel) != 0 && (nlevel) % (gfbb)->levelStep == 0 && \
(nlevel) != (gfbb)->rootitem->level)

So, I think we should just do silent return from the function instead of triggering error. Patch is attached.

------
With best regards,
Alexander Korotkov.
Вложения

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

Предыдущее
От: Bruce Momjian
Дата:
Сообщение: Re: random_page_cost vs seq_page_cost
Следующее
От: Tom Lane
Дата:
Сообщение: Re: When do we lose column names?