Thread: Question about syscache

Question about syscache

From
Peter Eisentraut
Date:
In syscache.c, the structure cachedesc contains a field reloidattr that is
supposed to contain the number of an attribute that is an OID reference to
another table.  But what if there are two such attributes?

The concrete case is an index on pg_cast (castsource, casttarget), which
both reference pg_type.

-- 
Peter Eisentraut   peter_e@gmx.net



Re: Question about syscache

From
Tom Lane
Date:
Peter Eisentraut <peter_e@gmx.net> writes:
> In syscache.c, the structure cachedesc contains a field reloidattr that is
> supposed to contain the number of an attribute that is an OID reference to
> another table.  But what if there are two such attributes?

Specifically, it is a reference to pg_class.

> The concrete case is an index on pg_cast (castsource, casttarget), which
> both reference pg_type.

That is not a reference to pg_class, so you should not make reloidattr
reference it.

The point of reloidattr is that during a relation cache clear event,
it allows catcache to find all catcache rows that are related to that
relation cache entry (eg, pg_attribute, pg_trigger, etc).  So far
there's not been need for more than one such attribute per tuple.
        regards, tom lane