Dmitry Dolgov <9erthalion6@gmail.com> writes:
>> On Wed, Dec 09, 2020 at 04:59:34PM -0500, Tom Lane wrote:
>> 0001 adds the ability to attach a subscript handler to an existing
>> data type with ALTER TYPE. This is clearly going to be necessary
>> if we want extension types to be able to use this facility. The
>> only thing that I think might be controversial here is that I did
>> not add the ability to set pg_type.typelem.
> I'm curious what could be the use case for setting pg_type.typelem for
> subscripting? I don't see this that much controversial, but maybe I'm
> missing something.
If you want the result of subscripting to be "text" or some other built-in
type, then clearly there's no need to use typelem for that, you can just
refer to the standard OID macros. The potential use-case that I thought
of for setting typelem is where an extension defines types A and B and
would like subscripting of B to yield A. Installing A's OID as B.typelem
would save a catalog lookup during subscript parsing, and remove a bunch
of edge failure cases such as what happens if A gets renamed. However,
given the dependency behavior, this would also have the effect of "you
can't drop A without dropping B, and you can't modify A in any interesting
way either". That would be annoyingly restrictive if there weren't any
actual physical containment relationship. But on the other hand, maybe
it's acceptable and we just need to document it.
The other issue is what about existing stored SubscriptingRef structs.
If our backs were to the wall I'd think about removing the refelemtype
field so there's no stored image of typelem that needs to be updated.
But that would incur an extra catalog lookup in array_exec_setup, so
I don't much like it. If we do add the ability to set typelem, I'd
prefer to just warn people to not change it once they've installed a
subscript handler.
Anyway, between those two issues I'm about -0.1 on adding a way to alter
typelem. I won't fight hard if somebody wants it, but I'm inclined
to leave it out.
>> +1 using subscripts for hstore is nice idea
> Yeah, I also find it's a good suggestion, the implementation seems fine
> as well. As a side note, I'm surprised hstore doesn't have any
> functionality to update values, except hstore_concat.
Yeah. I cribbed the subscript-fetch implementation from hstore_fetchval,
but was surprised to find that there wasn't any direct equivalent function
for subscript-store. I guess people have gotten by with concat, but
it's not exactly an obvious way to do things.
regards, tom lane