On Fri, Jul 23, 2021 at 5:47 PM Tom Lane <t...@sss.pgh.pa.us> wrote: > > You seemed to think my previous comments about comparing opfamilies > > were hypothetical but I think we actually already have the > > optimization Peter wants, and it just doesn't apply in this case for > > lack of hacks. > > Hmm. Note that what this is checking for is same operator *class* not > same operator family (if it were doing the latter, Peter's case would > already work). I think it has to do that. Extending my previous > thought experiment about an unsigned integer type, if someone were to > invent one, it would make a lot of sense to include it in integer_ops, > and then the logic you suggest is toast. (Obviously, the cross-type > comparison operators you'd need to write would have to be careful, > but you'd almost certainly wish to write them anyway.)
Mumble. I hadn't considered that sort of thing. I assumed that when the documentation and/or code comments talked about a compatible notion of equality, it was a strong enough notion of "compatible" to preclude this sort of case. I'm not really sure why we shouldn't think of it that way; the example you give here is reasonable, but artificial. > Given that we require the non-cross-type members of an opclass to be > immutable, what this is actually doing may be safe. At least I can't > construct a counterexample after five minutes' thought. On the other > hand, I'm also a bit confused about how it ever succeeds at all. > If we've changed the heap column's type, it should not be using the > same opclass anymore (unless the opclass is polymorphic, but that > case is rejected too). I'm suspicious that this is just an expensive > way of writing "we can only preserve indexes that aren't on the > column that changed type". Well, you can change just the typemod, for example, which was a case that motivated this work originally. People wanted to be able to make varchar(10) into varchar(20) without doing a ton of work, and I think this lets that work. I seem to recall that there are at least a few cases that involve actually changing the type as well, but at 6pm on a Friday evening when I haven't looked at this in years, I can't tell you what they are off the top of my head. -- Robert Haas EDB: http://www.enterprisedb.com