Re: odd deadlock on CREATE TABLE AS SELECT

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: odd deadlock on CREATE TABLE AS SELECT
Дата
Msg-id 20805.1257727139@sss.pgh.pa.us
обсуждение исходный текст
Ответ на odd deadlock on CREATE TABLE AS SELECT  ("digital.death@gmx.it" <digital.death@gmx.it>)
Ответы Re: odd deadlock on CREATE TABLE AS SELECT  (digitaldeath <digital.death@gmx.it>)
Список pgsql-bugs
"digital.death@gmx.it" <digital.death@gmx.it> writes:
> I hope it's not a bug, but I get a deadlock error in a
> function/transaction with these statements:

It's not a bug.  The CREATE TABLE AS SELECT is acquiring a read lock on
table "adc", and then the ALTER TABLE RENAME tries to upgrade that lock
to exclusive.  If you've got some other stuff going on with "adc" at
the same time, a deadlock isn't surprising in the least.

You could make the function safe by adding "LOCK TABLE adc" before
the select.  However, if the idea is to not hold a strong lock on adc
while the CREATE is going on, this approach isn't going to work :-(

I kinda think you have more bugs than that, btw.  If a deadlock is
happening it's probably because some other process also had read lock
on "adc" and is trying to upgrade it, which would strongly suggest
that the other process is trying to modify the contents of "adc",
which would be a Real Bad Thing because it implies that you're losing
data with this.  Any changes committed into "adc" after the function
starts are not going to be reflected in the updated version of "adc",
which cannot be what you want.

            regards, tom lane

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

Предыдущее
От: "Viisard"
Дата:
Сообщение: BUG #5172: ecpg - cursor with regexp containing '.*/' fails to compile with gcc
Следующее
От: Tom Lane
Дата:
Сообщение: Re: BUG #5174: [minor] directories symlinked into base/ are not recursively removed