Re: CREATE INDEX CONCURRENTLY on partitioned index

Поиск
Список
Период
Сортировка
От Alexander Pyhalov
Тема Re: CREATE INDEX CONCURRENTLY on partitioned index
Дата
Msg-id 37d3f0a984a15f6465b83027eed8c588@postgrespro.ru
обсуждение исходный текст
Ответ на Re: CREATE INDEX CONCURRENTLY on partitioned index  (Justin Pryzby <pryzby@telsasoft.com>)
Ответы Re: CREATE INDEX CONCURRENTLY on partitioned index  (Alexander Pyhalov <a.pyhalov@postgrespro.ru>)
Список pgsql-hackers
Justin Pryzby писал 2023-07-13 05:27:
> On Mon, Mar 27, 2023 at 01:28:24PM +0300, Alexander Pyhalov wrote:
>> Justin Pryzby писал 2023-03-26 17:51:
>> > On Sun, Dec 04, 2022 at 01:09:35PM -0600, Justin Pryzby wrote:
>> > > This currently handles partitions with a loop around the whole CIC
>> > > implementation, which means that things like WaitForLockers() happen
>> > > once for each index, the same as REINDEX CONCURRENTLY on a partitioned
>> > > table.  Contrast that with ReindexRelationConcurrently(), which handles
>> > > all the indexes on a table in one pass by looping around indexes within
>> > > each phase.
>> >
>> > Rebased over the progress reporting fix (27f5c712b).
>> >
>> > I added a list of (intermediate) partitioned tables, rather than looping
>> > over the list of inheritors again, to save calling rel_get_relkind().
>> >
>> > I think this patch is done.
>> 
>> Overall looks good to me. However, I think that using 'partitioned' as 
>> list
>> of partitioned index oids in DefineIndex() is a bit misleading - we've 
>> just
>> used it as boolean, specifying if we are dealing with a partitioned
>> relation.
> 
> Right.  This is also rebased on 8c852ba9a4 (Allow some exclusion
> constraints on partitions).

Hi.
I have some more question.
In the following code (indexcmds.c:1640 and later)

1640                         rel = table_open(relationId, 
ShareUpdateExclusiveLock);
1641                         heaprelid = rel->rd_lockInfo.lockRelId;
1642                         table_close(rel, ShareUpdateExclusiveLock);
1643                         SET_LOCKTAG_RELATION(heaplocktag, 
heaprelid.dbId, heaprelid.relId);

should we release ShareUpdateExclusiveLock before getting session lock 
in DefineIndexConcurrentInternal()?
Also we unlock parent table there between reindexing childs in the end 
of DefineIndexConcurrentInternal():

1875         /*
1876          * Last thing to do is release the session-level lock on 
the parent table.
1877          */
1878         UnlockRelationIdForSession(&heaprelid, 
ShareUpdateExclusiveLock);
1879 }


Is it safe? Shouldn't we hold session lock on the parent table while 
rebuilding child indexes?



-- 
Best regards,
Alexander Pyhalov,
Postgres Professional



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

Предыдущее
От: Michael Paquier
Дата:
Сообщение: Re: add non-option reordering to in-tree getopt_long
Следующее
От: Peter Eisentraut
Дата:
Сообщение: Re: Consistent coding for the naming of LR workers