Thread: iterating over relation's attributes

iterating over relation's attributes

From
Andrew Dunstan
Date:
What is the approved way to iterate over a relation's attributes? I see 
that lsyscache.c::get_relnatts() is marked NOT_USED and has been for 
nearly seven years. Maybe it's time to remove that code ;-)

cheers

andrew


Re: iterating over relation's attributes

From
Tom Lane
Date:
Andrew Dunstan <andrew@dunslane.net> writes:
> What is the approved way to iterate over a relation's attributes?

Most places scan through the relation's tuple descriptor, rather
than expending multiple catalog lookups in pg_attribute.
        regards, tom lane


Re: iterating over relation's attributes

From
Andrew Dunstan
Date:

Tom Lane wrote:
> Andrew Dunstan <andrew@dunslane.net> writes:
>   
>> What is the approved way to iterate over a relation's attributes?
>>     
>
> Most places scan through the relation's tuple descriptor, rather
> than expending multiple catalog lookups in pg_attribute.
>
>     
>   

Doesn't that require me to open the relation? Is that a good thing if I 
wouldn't otherwise be doing that?

This is in the context of making CheckAttributeType recurse into 
composite types.

cheers

andrew


Re: iterating over relation's attributes

From
Tom Lane
Date:
Andrew Dunstan <andrew@dunslane.net> writes:
> Tom Lane wrote:
>> Andrew Dunstan <andrew@dunslane.net> writes:
>>> What is the approved way to iterate over a relation's attributes?
>> 
>> Most places scan through the relation's tuple descriptor, rather
>> than expending multiple catalog lookups in pg_attribute.

> Doesn't that require me to open the relation? Is that a good thing if I 
> wouldn't otherwise be doing that?

Sure, because whatever work gets done is likely to be amortized across
multiple uses of the relcache entry anyway.
        regards, tom lane