Re: locks in CREATE TRIGGER, ADD FK

Поиск
Список
Период
Сортировка
От Neil Conway
Тема Re: locks in CREATE TRIGGER, ADD FK
Дата
Msg-id 4240DAB9.1020601@samurai.com
обсуждение исходный текст
Ответ на Re: locks in CREATE TRIGGER, ADD FK  (Christopher Kings-Lynne <chriskl@familyhealth.com.au>)
Ответы Re: locks in CREATE TRIGGER, ADD FK  (Bruce Momjian <pgman@candle.pha.pa.us>)
Re: locks in CREATE TRIGGER, ADD FK  (Neil Conway <neilc@samurai.com>)
Список pgsql-hackers
Christopher Kings-Lynne wrote:
> If you want to be my friend forever, then fix CLUSTER so that it uses 
> sharerowexclusive as well :D

Hmm, this might be possible as well. During a CLUSTER, we currently

- lock the heap relation with AccessExclusiveLock
- lock the index we're clustering on with AccessExclusiveLock
- create a temporary heap relation
- fill with data from the old heap relation, via an index scan
- swap the relfilenodes of the old and temporary heap relations
- rebuild indexes

We certainly can't allow concurrent modifications to either the table or 
the clustered index while this is happening. Allowing index scans 
*should* be safe -- an index scan could result in modifications to the 
index (e.g. updating "tuple is killed" bits), but those shouldn't be 
essential. We might also want to disallow SELECT FOR UPDATE, since we 
would end up invoking heap_mark4update() on the old heap relation. Not 
sure offhand how serious that would be.

So I think it should be possible to lock both the heap relation and the 
index with ExclusiveLock, which would allow SELECTs on them. This would 
apply to both the single relation and multiple relation variants of 
CLUSTER (since we do each individual clustering in its own transaction).

... except that when we rebuild the relation's indexes, we acquire an 
AccessExclusiveLock on the index. This would introduce the risk of 
deadlock. It seems necessary to acquire an AccessExclusiveLock when 
rebuilding shared indexes, since we do the index build in-place, but I 
think we can get by with an ExclusiveLock in the non-shared case, for 
similar reasons as above: we build the new index and then swap relfilenodes.

-Neil


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

Предыдущее
От: Christopher Kings-Lynne
Дата:
Сообщение: Re: locks in CREATE TRIGGER, ADD FK
Следующее
От: Bruce Momjian
Дата:
Сообщение: Re: locks in CREATE TRIGGER, ADD FK