Thank you Tom and Heikki for your input.

On Sun, Dec 6, 2020 at 4:40 AM Tom Lane <t...@sss.pgh.pa.us> wrote:

> Heikki Linnakangas <hlinn...@iki.fi> writes:
> >> I can understand why we need EquivalenceClass for UniqueKey, but I can't
> >> understand why we need opfamily here.
>
> > Thinking a bit harder, I guess we don't. Because EquivalenceClass
> > includes the operator family already, in the ec_opfamilies field.
>
> No.  EquivalenceClasses only care about equality, which is why they
> might potentially mention several opfamilies that share an equality
> operator.  If you care about sort order, you *cannot* rely on an
> EquivalenceClass to depict that.  Now, abstract uniqueness also only
> cares about equality, but if you are going to implement it via sort-
> and-unique then you need to settle on a sort order.
>

I think UniqueKey only cares about equality.   Even DISTINCT / groupBy
can be implemented with sort,  but UniqueKey only care about the result
of DISTINCT/GROUPBY,  so it doesn't matter IIUC.


>
> I agree we are overspecifying DISTINCT by settling on a sort operator at
> parse time, rather than considering all the possibilities at plan time.
> But given that opfamilies sharing equality are mostly a hypothetical
> use-case, I'm not in a big hurry to fix it.  Before we had ASC/DESC
> indexes, there was a real use-case for making a "reverse sort" opclass,
> with the same equality as the type's regular opclass but the opposite sort
> order.  But that's ancient history now, and I've seen few other plausible
> use-cases.
>
> I have not been following this thread closely enough to understand
> why we need a new "UniqueKeys" data structure at all.


Currently the UniqueKey is defined as a List of Expr, rather than
EquivalenceClasses.
A complete discussion until now can be found at [1] (The messages I replied
to also
care a lot and the information is completed). This patch has stopped at
this place for
a while,  I'm planning to try EquivalenceClasses,  but any suggestion would
be welcome.


> But if the
> motivation is only to remove this overspecification, I humbly suggest
> that it ain't worth the trouble.
>
>                         regards, tom lane
>

[1]
https://www.postgresql.org/message-id/CAKU4AWqy3Uv67%3DPR8RXG6LVoO-cMEwfW_LMwTxHdGrnu%2Bcf%2BdA%40mail.gmail.com


-- 
Best Regards
Andy Fan

Reply via email to