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
|
Список | 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 по дате отправления: