Re: BUG #15896: pg_upgrade from 10-or-earlier: TRAP: FailedAssertion(»!(metad->btm_version >= 3)«
Peter Geoghegan <pg@bowt.ie>
From: Peter Geoghegan <pg@bowt.ie>
To: Alvaro Herrera <alvherre@2ndquadrant.com>
Cc: Christoph Berg <myon@debian.org>, PostgreSQL mailing lists <pgsql-bugs@lists.postgresql.org>,
Teodor Sigaev <teodor@sigaev.ru>
Date: 2019-07-05T22:14:31Z
Lists: pgsql-bugs
On Fri, Jul 5, 2019 at 8:49 AM Alvaro Herrera <alvherre@2ndquadrant.com> wrote: > > TRAP: FailedAssertion(»!(metad->btm_version >= 3)«, Datei: > > »/build/postgresql-12-3URvLF/postgresql-12-12~beta2/build/../src/backend/access/nbtree/nbtpage.c«, > > Zeile: 665) > > Seems that _bt_getrootheight is too optimistic about the metapage > version it'll find. I suppose this could be handled by just not caching > the metapage if it is of the old version ... or maybe by calling > _bt_upgrademetapage(). The problem here predates v12 -- the call to _bt_cachemetadata() was added to _bt_getrootheight() by commit 0a64b45152b, which went into v11. My commit dd299df8189 added a new assertion that fails, but that's just a symptom -- I changed the code in _bt_getrootheight() to use a BTMetaPageData pointer to shared memory (i.e. a pointer to the authoritative version), rather than using the newly-out-of-sync cached version. It shouldn't be out-of-sync at all. _bt_getrootheight() is mostly just something that exists for the planner, so it has no business calling _bt_cachemetadata(), which will "upgrade" the cached metadata image from version 2 to version 3 if it happens to be on version 2. How can it be okay to upgrade the cached version without also upgrading the on-disk/shared_buffers version? This bug was hiding in plain sight. -- Peter Geoghegan
Commits
-
Fix nbtree metapage cache upgrade bug.
- d004147eb3ec 13.0 landed
- 7772dece9850 12.0 landed
- 6523f2ed3441 11.5 landed
-
Make heap TID a tiebreaker nbtree index column.
- dd299df8189b 12.0 cited
-
Fix handling of non-upgraded B-tree metapages
- 0a64b45152b5 11.0 cited
-
Skip full index scan during cleanup of B-tree indexes when possible
- 857f9c36cda5 11.0 cited