Re: WIP: Covering + unique indexes.
Alexander Korotkov <a.korotkov@postgrespro.ru>
On Fri, Apr 6, 2018 at 8:22 PM, Peter Geoghegan <pg@bowt.ie> wrote:
> On Fri, Apr 6, 2018 at 10:20 AM, Teodor Sigaev <teodor@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
Commits
-
Adjust INCLUDE index truncation comments and code.
- 075aade4361b 11.0 landed
-
Add commentary explaining why MaxIndexTuplesPerPage calculation is safe.
- 2a67d6440db4 11.0 cited
-
Indexes with INCLUDE columns and their support in B-tree
- 8224de4f42cc 11.0 landed
-
Add amcheck verification of heap relations belonging to btree indexes.
- 7f563c09f890 11.0 cited
-
Doc: move info for btree opclass implementors into main documentation.
- 3785f7eee3d9 11.0 cited
-
Doc: mention that you can't PREPARE TRANSACTION after NOTIFY.
- e4fbf22831c2 11.0 cited
-
Remove dedicated B-tree root-split record types.
- 0c504a80cf2e 11.0 cited
-
Restructure index access method API to hide most of it at the C level.
- 65c5fcd353a8 9.6.0 cited
-
Split _bt_insertonpg to two functions.
- bc292937ae6a 8.3.0 cited
-
Major overhaul of btree index code. Eliminate special BTP_CHAIN logic for
- 9e85183bfc31 7.1.1 cited