Re: StrategyAM for IndexAMs

From: Matthias van de Meent <boekewurm+postgres(at)gmail(dot)com>
To: Simon Riggs <simon(dot)riggs(at)enterprisedb(dot)com>
Cc: PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Subject: Re: StrategyAM for IndexAMs
Date: 2022-07-22 09:23:23
Message-ID: CAEze2WhYxiUZW8hHmCROpgx8YcMGNWCyG56P_+jm3CQWNt_0AA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Tue, 19 Jul 2022 at 18:56, Simon Riggs <simon(dot)riggs(at)enterprisedb(dot)com> wrote:
>
> I'm preparing the way for a later patch that would allow unique hash
> indexes to be primary keys. There are various parts to the problem. I
> was surprised at how many times we hardcode BTREE_AM_OID and
> associated BT Strategy Numbers in many parts of the code, so have been
> looking for ways to reconcile how Hash and Btree strategies work and
> potentially remove hardcoding. There are various comments that say we
> need a way to be able to define which Strategy Numbers are used by
> indexams.
>
> I came up with a rather simple way: the indexam just says "I'm like a
> btree", which allows you to avoid adding hundreds of operator classes
> for the new index, since that is cumbersome and insecure.

I'm fairly certain that you can't (and don't want to) make a hash
index look like a btree index, considering that of the btree
operations only equality checks make sense in the hash context, and
that you can't do ordered retrieval (incl. no min/max), which are
major features of btree.

With that in mind, could you tell whether this patch is related to the
effort of hash-based unique primary keys (apart from inspiration
during development), and if so, how?

> Specifically, we add a "strategyam" field to the IndexAmRoutine that
> allows an indexam to declare whether it is like a btree, like a hash
> index or another am. This then allows us to KEEP the hardcoded
> BTREE_AM_OID tests, but point them at the strategyam rather than the
> relam, which can be cached in various places as needed. No catalog
> changes needed.
>
> I've coded this up and it works fine.
>
> The attached patch is still incomplete because we use this in a few
> places and they all need to be checked. So before I do that, it seems
> sensible to agree the approach.
>
> (Obviously, there are hundreds of places where BTEqualStrategyNumber
> is hardcoded, and this doesn't change that at all, in case that wasn't
> clear).
>
> Comments welcome on this still WIP patch.

I think this is a great step in the right direction, fixing one of the
issues with core index AMs, issues I also complained about earlier
[0].

Thanks,

Matthias van de Meent

[0] https://www.postgresql.org/message-id/CAEze2Wg8QhpOnHoqPNB-AaexGX4Zaij%3D4TT0kaMhF_6T5FXxmQ%40mail.gmail.com

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Martin Kalcher 2022-07-22 09:31:07 Re: [PATCH] Introduce array_shuffle() and array_sample()
Previous Message Yuya Watari 2022-07-22 09:16:51 Re: [PoC] Reducing planning time when tables have many partitions