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-25T23:19:10Z
Lists: pgsql-hackers
On Sun, Aug 25, 2019 at 2:55 PM Peter Geoghegan <pg@bowt.ie> wrote: > 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. Another question is whether or not it would be okay to define "equality is precise"-ness to be "the system's generic equality function works perfectly as a drop-in replacement for my own equality operator's function". The system's generic equality function could be the recently added datum_image_eq() function -- that looks like it will do exactly what I have in mind. This would be a new way of using datum_image_eq(), I think, since it wouldn't be okay for it to give an answer that differed from the equality operator's function. It looks like existing datum_image_eq() callers can deal with false negatives (but not false positives, which are impossible). This exceeds what is strictly necessary for the deduplication patch, but it seems like the patch should make comparisons as fast as possible in the context of deduplicating items (it would be nice if it could just use datum_image_eq instead of an insertion scankey when doing many comparisons to deduplicate items). We can imagine a datatype with undefined garbage bytes that affect the answer that datum_image_eq() gives, but could be safe targets for deduplication, so it's not clear if being this aggressive will work. But maybe that isn't actually possible among types that aren't inherently unsafe for deduplication. And maybe we could be more aggressive with optimizations in numerous other contexts by defining "equality is precise"-ness as strict binary equality after accounting for TOAST compression. -- Peter Geoghegan
Commits
-
Add equalimage B-Tree support functions.
- 612a1ab76724 13.0 landed
-
Make _bt_keep_natts_fast() use datum_image_eq().
- 1f55ebae2722 13.0 landed
-
Teach datum_image_eq() about cstring datums.
- 8c951687f58a 13.0 landed
-
Fix optimization of foreign-key on update actions
- 1ffa59a85cb4 12.0 cited
-
Support all SQL:2011 options for window frame clauses.
- 0a459cec96d3 11.0 cited
-
Create a "sort support" interface API for faster sorting.
- c6e3ac11b60a 9.2.0 cited