Re: Partitioned index can be not dumped
От | Alexander Pyhalov |
---|---|
Тема | Re: Partitioned index can be not dumped |
Дата | |
Msg-id | b62ec70dab88a1f441c18e69f1c4f696@postgrespro.ru обсуждение исходный текст |
Ответ на | Re: Partitioned index can be not dumped (Álvaro Herrera <alvherre@alvh.no-ip.org>) |
Ответы |
Re: Partitioned index can be not dumped
|
Список | pgsql-hackers |
Álvaro Herrera писал 2021-06-30 21:54: > On 2021-Jun-30, Alexander Pyhalov wrote: > >> I've seen the following effect on PostgreSQL 14 stable branch. >> Index, created on partitioned table, disappears from pg_dump or psql >> \d >> output. >> This seems to begin after analyze. Partitoned relation relhasindex >> pg_class >> field suddenly becomes false. > > Yeah, that seems correct. > > I didn't verify your test case, but after looking at the code I thought > there was a bit too much churn and the new conditions looked quite > messy > and unexplained. It seems simpler to be explicit at the start about > what we're doing, and keep nindexes=0 for partitioned tables; with > that, > the code works unchanged because the "for" loops do nothing without > having to check for anything. My proposal is attached. > > I did run the tests and they do pass, but I didn't look very closely at > what the tests are actually doing. > > I noticed that part of that comment seems to be a leftover from ... I > don't know when: "We do not analyze index columns if there was an > explicit column list in the ANALYZE command, however." I suppose this > is about some code that was removed, but I didn't dig into it. Looks good. It seems this comment refers to line 455. 445 if (nindexes > 0) 446 { 447 indexdata = (AnlIndexData *) palloc0(nindexes * sizeof(AnlIndexData)); 448 for (ind = 0; ind < nindexes; ind++) 449 { 450 AnlIndexData *thisdata = &indexdata[ind]; 451 IndexInfo *indexInfo; 452 453 thisdata->indexInfo = indexInfo = BuildIndexInfo(Irel[ind]); 454 thisdata->tupleFract = 1.0; /* fix later if partial */ 455 if (indexInfo->ii_Expressions != NIL && va_cols == NIL) 456 { 457 ListCell *indexpr_item = list_head(indexInfo->ii_Expressions); 458 459 thisdata->vacattrstats = (VacAttrStats **) 460 palloc(indexInfo->ii_NumIndexAttrs * sizeof(VacAttrStats *)); Also I've added non-necessary new line in test. Restored comment and removed new line. -- Best regards, Alexander Pyhalov, Postgres Professional
Вложения
В списке pgsql-hackers по дате отправления: