On 09/25/2012 12:14 PM, Tom Lane wrote:
> Alvaro Herrera <alvherre@2ndquadrant.com> writes:
>> Excerpts from Hitoshi Harada's message of mar sep 25 02:11:14 -0300 2012:
>>> Of course you can
>>> look up type name conlusting SysCache and see if the type name is
>>> "hstore", but it's expensive to do it for every function invocation,
>>> so caching the hstore's oid in plv8 is the current workaround, which
>>> is not truly safe because the hstore's oid may change while caching.
>> Hm, couldn't you just register an invalidation callback with
>> CacheRegisterSyscacheCallback()?
> Yeah, if the code that needs the value is in the backend; but if it is,
> the cost of looking the value up again probably isn't that much either.
> The need for a cache is much greater in client-side code.
>
> The bigger issues in my mind have to do with how you look up the type in
> the first place (considering schema search path and so forth) and how
> you know that "hstore" is what you think it is.
>
> I recall some discussion of assigning a UUID to each datatype, which
> might alleviate the second part of that at least. Does nothing for
> malicious impersonation of a datatype of course, but should prevent
> accidental collisions.
>
>
One nice thing about that idea (if I understand it correctly) is that we
could use it for existing types. The horse has long bolted on Oids for
hstore, because it has lots of existing deployments with unknown Oids.
cheers
andrew