On Fri, Apr 6, 2018 at 8:22 PM, Peter Geoghegan <p...@bowt.ie> wrote:
> On Fri, Apr 6, 2018 at 10:20 AM, Teodor Sigaev <teo...@sigaev.ru> wrote: > > As far I can see, there is no any on-disk representation differece for > > *existing* indexes. So, pg_upgrade is not need here and there isn't any > new > > code to support "on-fly" modification. Am I right? > > Yes. > > I'm going to look at this again today, and will post something within > 12 hours. Please hold off on committing until then. > Thank you. Thinking about that again, I found that we should relax our requirements to "minus infinity" items, because pg_upgraded indexes doesn't have any special bits set for those items. What do you think about applying following patch on the top of v14? diff --git a/src/backend/access/nbtree/nbtsearch.c b/src/backend/access/nbtree/nbtsearch.c index 44605fb5a4..53dc47ff82 100644 --- a/src/backend/access/nbtree/nbtsearch.c +++ b/src/backend/access/nbtree/nbtsearch.c @@ -2000,8 +2000,12 @@ _bt_check_natts(Relation index, Page page, OffsetNumber offnum) } else if (!P_ISLEAF(opaque) && offnum == P_FIRSTDATAKEY(opaque)) { - /* Leftmost tuples on non-leaf pages have no attributes */ - return (BTreeTupGetNAtts(itup, index) == 0); + /* + * Leftmost tuples on non-leaf pages have no attributes, or haven't + * INDEX_ALT_TID_MASK set in pg_upgraded indexes. + */ + return (BTreeTupGetNAtts(itup, index) == 0 || + ((itup->t_info & INDEX_ALT_TID_MASK) == 0)); } else { ------ Alexander Korotkov Postgres Professional: http://www.postgrespro.com The Russian Postgres Company