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+MxYkQjGP3K0jfe_rRDsiuGynHecsmnbpSkq6VLk1kB3pPyw@mail.gmail.com
обсуждение исходный текст
Список pgsql-general
Hi, all,

When using 'create index concurrently', we use a MVCC snaptshot, we should not see tuples that is 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 report 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-general по дате отправления:

Предыдущее
От: Pavel Stehule
Дата:
Сообщение: Re: Avoid excessive inlining?
Следующее
От: Thomas Flatley
Дата:
Сообщение: Max# of tablespaces