Indexscan failed assert caused by using index without lock

Поиск
Список
Период
Сортировка
От 高增琦
Тема Indexscan failed assert caused by using index without lock
Дата
Msg-id CAFmBtr35nsmbKvb_FEjQndbieMiser+zBLhhS7_a9pcdSeVvZA@mail.gmail.com
обсуждение исходный текст
Ответы Re: Indexscan failed assert caused by using index without lock  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Following example can reproduce the problem:

```
create table d(a int);
create index di on d(a);
set enable_seqscan=off;
set enable_bitmapscan to off;
prepare p as delete from d where a=3;
execute p;
execute p;
```

The reason is that: ExecInitIndexScan will not lock index because it thinks InitPlan
already write-locked index. But in some cases, such as DELETE+cache plan will
not lock index, then failed assert.

Some thoughts on how to fix it:
1. Disable the optimization in ExecInitModifyTable, don't skip ExecOpenIndices for DELETE
2. For DELETE, instead of open indices, just lock them
3. Lock index of target rel in ExecInitIndexScan for DELETE

PS: another question, why does ExecCloseIndices release index lock instead of
keeping them?

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

Предыдущее
От: Alvaro Herrera
Дата:
Сообщение: Re: monitoring CREATE INDEX [CONCURRENTLY]
Следующее
От: Павлухин Иван
Дата:
Сообщение: Column lookup in a row performance