Re: pgsql: Skip full index scan during cleanup of B-tree indexes when possi
| От | Alexander Korotkov |
|---|---|
| Тема | Re: pgsql: Skip full index scan during cleanup of B-tree indexes when possi |
| Дата | |
| Msg-id | CAPpHfdu-VhEGuqxu9QvA01RpD59+EEPwwj+hzyjofkMbWdc_gg@mail.gmail.com обсуждение исходный текст |
| Ответ на | Re: pgsql: Skip full index scan during cleanup of B-tree indexes when possi (Alexander Korotkov <a.korotkov@postgrespro.ru>) |
| Список | pgsql-committers |
On Thu, Apr 5, 2018 at 3:24 PM, Alexander Korotkov <a.korotkov@postgrespro.ru> wrote:
On Thu, Apr 5, 2018 at 2:26 PM, Alexander Korotkov <a.korotkov@postgrespro.ru> wrote:On Thu, Apr 5, 2018 at 6:28 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:Peter Geoghegan <pg@bowt.ie> writes:
>>> TRAP: FailedAssertion("!(metad->btm_version == 3)", File:
>>> "/home/pg/postgresql/root/build/../source/src/backend/access /nbtree/nbtpage.c",
>>> Line: 619)
>> Hm, buildfarm's not complaining --- what's the test case?
> This was discovered while testing/reviewing the latest version of the
> INCLUDE covering indexes patch. It now seems to be unrelated.
Oh, wait ... I wonder if you saw that because you were running a new
backend without having re-initdb'd? Once you had re-initdb'd, then
of course there would be no old-format btree indexes anywhere. But
if you hadn't, then anyplace that was not prepared to cope with the
old header format would complain about pre-existing indexes.
In short, this sounds like a place that did not get the memo about
how to cope with un-upgraded indexes.That's an issue, because meta-page should be upgraded "on the fly".That was tested, but perhaps without assertions. I'll investigate more onthis an propose a fix.So, "Assert(metad->btm_version == BTREE_VERSION)" was failed, becausemetadata was copied from meta page to rel->rd_amcache "as is" withmetad->btm_version == BTREE_MIN_VERSION.Without assert everything works fine, because extended metadata fields arenever used from rel->rd_amcache. So my first intention was to relax thisassert to Assert(metad->btm_version >= BTREE_MIN_VERSION && metad->btm_version <= BTREE_VERSION).But then I still have concern that we copy metadata beyond pd_lowerwhen metapage is in old format.memcpy(rel->rd_amcache, metad, sizeof(BTMetaPageData));This is why I decided to write separate function to handle caching of metadata,which takes care about filling unavailable fields of metadata with default values.I also made same fix for pageinspect. Patch is attached.
I forgot to note, that I've tested this patch in following way. I did initdb and
created some tables and indexes on eac93e20af. And then used the
same cluster on patched master including index scans, some inserts/updates/deletes,
bt_metap(), vacuum and so on. Everything worked fine.
Sorry, that I didn't test that enough before.
------
Alexander Korotkov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company
Alexander Korotkov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company
В списке pgsql-committers по дате отправления: