Why not report ERROR when "concurrent insert in progress within table"?

Поиск
Список
Период
Сортировка
От Meng Qingzhong
Тема Why not report ERROR when "concurrent insert in progress within table"?
Дата
Msg-id CAL+MxYn4hhVJKsmYgvZEMd8c4eamsg=BFVP1gGRLvsYPg==Cvw@mail.gmail.com
обсуждение исходный текст
Список pgsql-hackers
Hi, all,

When using 'create index concurrently', we use a MVCC snaptshot, we should not see tuples that are HEAPTUPLE_INSERT_IN_PROGRESS. I think we should report an ERROR in this case. But, we report WARNING now.

In the early days, it indeed reports ERROR, but the behaviour is changed by commit 1ddc2703a936d03953657f43345460b9242bbed1.

I am not very clear about it. Could anyone explain it?

The following are the related codes:

Earlier PG versions: the code is in function IndexBuildHeapScan
case HEAPTUPLE_DELETE_IN_PROGRESS:
    /*
    * As with INSERT_IN_PROGRESS case, this is unexpected
    * unless it's our own deletion or a system catalog.
    */
    Assert(!(heapTuple->t_data->t_infomask & HEAP_XMAX_IS_MULTI));
    xwait = HeapTupleHeaderGetXmax(heapTuple->t_data);
    if (!TransactionIdIsCurrentTransactionId(xwait))
    {
        if (!is_system_catalog)
            elog(WARNING, "concurrent delete in progress within table \"%s\"",
                RelationGetRelationName(heapRelation));

Newest PG version: the code in function heapam_index_build_range_scan


Thanks all!

Regards,
Meng Qingzhong

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

Предыдущее
От: Amit Kapila
Дата:
Сообщение: Re: [Patch] Optimize dropping of relation buffers using dlist
Следующее
От: Tomas Vondra
Дата:
Сообщение: Re: Handing off SLRU fsyncs to the checkpointer