Re: [HACKERS] DROP TABLE does not drop a table completely

Поиск
Список
Период
Сортировка
От Vadim Mikheev
Тема Re: [HACKERS] DROP TABLE does not drop a table completely
Дата
Msg-id 373FBEBF.C09E99B@krasnet.ru
обсуждение исходный текст
Ответ на DROP TABLE does not drop a table completely  ("Hiroshi Inoue" <Inoue@tpf.co.jp>)
Ответы RE: [HACKERS] DROP TABLE does not drop a table completely  ("Hiroshi Inoue" <Inoue@tpf.co.jp>)
Список pgsql-hackers
Hiroshi Inoue wrote:
> 
> > >
> > > ERROR:  cannot open segment 1 of relation sessions_done_id_index
> > >
> >
> > I got the same error in my test cases.
> > I don't understand the cause of this error.
> >
> 
> I got this error message by dropping a table while concurrent transactions
> inserting rows to the same table.
> 
> I think other transactions should abort with message "Table does not
> exist". But in most cases the result is not so.
> 
> It seems that other transactions could proceed before DROP TABLE
> command is completed.
> 
> AFAIC heap_destroy_with_catalog() acquires AccessExclusiveLock and
> releases the lock inside the function.
> 
> I think that heap_destroy_with_catalog() (or upper level function) should
> not
> release the lock.

You're right - this should be done keeping in mind that DROP is allowed
inside BEGIN/END (long transactions), but I'm not sure that this
will help generally: does it matter when unlock dropped relation -
in heap_destroy_with_catalog() or in commit? The real problem is
that heap/index_open open file _before_ acquiring any locks and
doesn't check t_xmax of relation/index tuple. I believe that
this is old problem. There are another ones, sure. 
Catalog cache code must be re-designed.

Vadim


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

Предыдущее
От: Ole Gjerde
Дата:
Сообщение: Re: [HACKERS] sgmr* vs. md*
Следующее
От: "Hiroshi Inoue"
Дата:
Сообщение: RE: [HACKERS] DROP TABLE does not drop a table completely