Re: Building infrastructure for B-Tree deduplication that recognizes when opclass equality is also equivalence

Peter Geoghegan <pg@bowt.ie>

From: Peter Geoghegan <pg@bowt.ie>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Anastasia Lubennikova <a.lubennikova@postgrespro.ru>
Date: 2019-08-25T21:55:08Z
Lists: pgsql-hackers
On Sun, Aug 25, 2019 at 2:40 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
> > I was thinking of stashing an "equality is precise" flag in the
> > metapage of each nbtree index, since we will only determine this once,
> > at CREATE INDEX time.
>
> Sure.

I suppose that we'd add something new to CREATE OPERATOR CLASS to make
this work? My instinct is to avoid adding things that are only
meaningful for a single AM to interfaces like CREATE OPERATOR CLASS,
but the system already has numerous dependencies on B-Tree opclasses
that seem comparable to me.

There is a single case where nbtree stores a type that differs from
the type actually being indexed by the operator class: the "name"
case, where the underlying storage type is actually cstring. I'm not
sure whether or not this needs to be treated as its own kind of
special case. I suppose that we can ignore it completely, because
we're not directly concerned with the physical representation used
within an index. In fact, a major goal for this new infrastructure is
that nbtree gets to fully own the representation (it just needs to
know about the high level or logical requirements).

-- 
Peter Geoghegan



Commits

  1. Add equalimage B-Tree support functions.

  2. Make _bt_keep_natts_fast() use datum_image_eq().

  3. Teach datum_image_eq() about cstring datums.

  4. Fix optimization of foreign-key on update actions

  5. Support all SQL:2011 options for window frame clauses.

  6. Create a "sort support" interface API for faster sorting.