Check equality semantics for unique indexes on partitioned tables.
  We require the partition key to be a subset of the set of columns
 being made unique, so that physically-separate indexes on the different
 partitions are sufficient to enforce the uniqueness constraint. 
 The existing code checked that the listed columns appear, but did not
 inquire into the index semantics, which is a serious oversight given
 that different index opclasses might enforce completely different
 notions of uniqueness. 
 Ideally, perhaps, we'd just match the partition key opfamily to the
 index opfamily.  But hash partitioning uses hash opfamilies which we
 can't directly match to btree opfamilies.  Hence, look up the equality
 operator in each family, and accept if it's the same operator.  This
 should be okay in a fairly general sense, since the equality operator
 ought to precisely represent the opfamily's notion of uniqueness. 
 A remaining weak spot is that we don't have a cross-index-AM notion of
 which opfamily member is "equality".  But we know which one to use for
 hash and btree AMs, and those are the only two that are relevant here
 at present.  (Any non-core AMs that know how to enforce equality are
 out of luck, for now.) 
 Back-patch to v11 where this feature was introduced. 
 Guancheng Luo, revised a bit by me 
 Discussion: https://postgr.es/m/
D9C3CEF7-04E8-47A1-8300-
CA1DCD5ED40D@gmail.com