Thread: OIDs missing in pg_attribute?

OIDs missing in pg_attribute?

From
"Marc G. Fournier"
Date:
Morning all ...
Well, just spend the past few days banging my head against a brick
wall trying to figure out why OpenACS 4.x won't work with PgSQL v7.2b3,
and just figured it out, or, at least, figured out part of it ...
v7.2b3 no longer has an OID on pg_attribute?
The following works great in v7.1.3, but fails in v7.b3:
select upper(c.relname) as table_name,        upper(a.attname) as column_name,        d.description as comments   from
pg_classc,        pg_attribute a          left outer join pg_description d on (a.oid = d.objoid)  where c.oid =
a.attrelid   and a.attnum > 0;
 
In v7.1.3, it retuns:
          table_name            |   column_name   | comments
---------------------------------+-----------------+----------PG_TYPE                         | TYPNAME
|PG_TYPE                        | TYPOWNER        |PG_TYPE                         | TYPLEN          |PG_TYPE
             | TYPPRTLEN       |PG_TYPE                         | TYPBYVAL        |PG_TYPE                         |
TYPTYPE        |PG_TYPE                         | TYPISDEFINED    |PG_TYPE                         | TYPDELIM        |
 
In v7.2b3, it returns:

ERROR:  No such attribute or function 'oid'
arthur_acs=#
Is this intentional? :(



Re: OIDs missing in pg_attribute?

From
Stephan Szabo
Date:
On Thu, 6 Dec 2001, Marc G. Fournier wrote:

>     Well, just spend the past few days banging my head against a brick
> wall trying to figure out why OpenACS 4.x won't work with PgSQL v7.2b3,
> and just figured it out, or, at least, figured out part of it ...
>
>     v7.2b3 no longer has an OID on pg_attribute?

I believe so.  My guess would be that it cut down the OID usage per
table greatly.

>     The following works great in v7.1.3, but fails in v7.b3:
>
>  select upper(c.relname) as table_name,
>          upper(a.attname) as column_name,
>          d.description as comments
>     from pg_class c,
>          pg_attribute a
>            left outer join pg_description d on (a.oid = d.objoid)
>    where c.oid = a.attrelid
>      and a.attnum > 0;

I think the test would now be d.objoid=c.oid and d.objsubid=a.attnum
So,
select upper(c.relname) as table_name,      upper(a.attname) as column_name,      d.description as comments
from (pg_class c join pg_attribute a on (c.oid=a.attrelid) left outer join
pg_description d on (d.objsubid=a.attnum and d.objoid=c.\
oid)) where a.attnum>0;





Re: OIDs missing in pg_attribute?

From
Brent Verner
Date:
[2001-12-06 21:47] Marc G. Fournier said:
| 
| Morning all ...
| 
|     Well, just spend the past few days banging my head against a brick
| wall trying to figure out why OpenACS 4.x won't work with PgSQL v7.2b3,
| and just figured it out, or, at least, figured out part of it ...
| 
|     v7.2b3 no longer has an OID on pg_attribute?

nope.  It appears to have been removed around 10 Aug 2001.

|     The following works great in v7.1.3, but fails in v7.b3:
| 
|  select upper(c.relname) as table_name,
|          upper(a.attname) as column_name,
|          d.description as comments
|     from pg_class c,
|          pg_attribute a
|            left outer join pg_description d on (a.oid = d.objoid)
|    where c.oid = a.attrelid
|      and a.attnum > 0;

see if this does what you need.  Notice the col_description() function
that obviates the need for pg_attribute.oid...

SELECT upper(c.relname) as table_name,       upper(a.attname) as column_name,       col_description(a.attrelid,
a.attnum)as comments
 
FROM pg_class c LEFT JOIN pg_attribute a  ON a.attrelid = c.oid 
WHERE a.attnum > 0;


cheers. brent

-- 
"Develop your talent, man, and leave the world something. Records are 
really gifts from people. To think that an artist would love you enough
to share his music with anyone is a beautiful thing."  -- Duane Allman


Re: OIDs missing in pg_attribute?

From
Tom Lane
Date:
"Marc G. Fournier" <scrappy@hub.org> writes:
>     v7.2b3 no longer has an OID on pg_attribute?

Yup.

>     Is this intentional? :(

Yup.

>     The following works great in v7.1.3, but fails in v7.b3:

>  select upper(c.relname) as table_name,
>          upper(a.attname) as column_name,
>          d.description as comments
>     from pg_class c,
>          pg_attribute a
>            left outer join pg_description d on (a.oid = d.objoid)
>    where c.oid = a.attrelid
>      and a.attnum > 0;

This would not work anyway in 7.2, since the primary key of
pg_description is now (objoid,classoid,objsubid) not just (objoid).
I'd recommend using col_description(a.attrelid, a.attnum) rather
than the explicit join against pg_description.
        regards, tom lane


Re: OIDs missing in pg_attribute?

From
Bruno Wolff III
Date:
On Fri, Dec 07, 2001 at 10:42:24AM -0500, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> I'd recommend using col_description(a.attrelid, a.attnum) rather
> than the explicit join against pg_description.

I couldn't find any documentation for this function in the function
section of the development docs or using a search with google.