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