pg_class and enum types

Started by Gevik Babakhaniover 16 years ago8 messages
#1Gevik Babakhani
pgdev@xs4all.nl

I was wondering why there is no pg_class record for the enum types. Do
we treat the enum types differently?

--
Regards,
Gevik

#2Robert Haas
robertmhaas@gmail.com
In reply to: Gevik Babakhani (#1)
Re: pg_class and enum types

On Sun, May 24, 2009 at 4:37 PM, Gevik Babakhani <pgdev@xs4all.nl> wrote:

I was wondering why there is no pg_class record for the enum types. Do we
treat the enum types differently?

Because types are stored in pg_type, not pg_class?

...Robert

#3Gevik Babakhani
pgdev@xs4all.nl
In reply to: Robert Haas (#2)
Re: pg_class and enum types

Robert Haas wrote:

On Sun, May 24, 2009 at 4:37 PM, Gevik Babakhani <pgdev@xs4all.nl> wrote:

I was wondering why there is no pg_class record for the enum types. Do we
treat the enum types differently?

Because types are stored in pg_type, not pg_class?

...Robert

That is certainly not true.... check the following...

create type test_type as
(
field1 integer,
field2 varchar
);

select * from pg_class where relname='test_type'

--
Regards,
Gevik

#4Andrew Dunstan
andrew@dunslane.net
In reply to: Gevik Babakhani (#1)
Re: pg_class and enum types

Gevik Babakhani wrote:

I was wondering why there is no pg_class record for the enum types. Do
we treat the enum types differently?

Why do you think we should? What would the record look like?

cheers

andrew

#5Andrew Dunstan
andrew@dunslane.net
In reply to: Gevik Babakhani (#3)
Re: pg_class and enum types

Gevik Babakhani wrote:

Robert Haas wrote:

On Sun, May 24, 2009 at 4:37 PM, Gevik Babakhani <pgdev@xs4all.nl>
wrote:

I was wondering why there is no pg_class record for the enum types.
Do we
treat the enum types differently?

Because types are stored in pg_type, not pg_class?

...Robert

That is certainly not true.... check the following...

create type test_type as
(
field1 integer,
field2 varchar
);

select * from pg_class where relname='test_type'

It's not so much that enum types are handled specially, but that
composite types are. :-)

There is no pg_class entry for int either.

cheers

andrew

#6Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#5)
Re: pg_class and enum types

Andrew Dunstan <andrew@dunslane.net> writes:

Gevik Babakhani wrote:

select * from pg_class where relname='test_type'

It's not so much that enum types are handled specially, but that
composite types are. :-)

Relations (tables) have always had both pg_class and pg_type entries.
The pg_class entry denotes the relation proper, the pg_type entry
denotes the relation's rowtype.

Composite types have the same two entries, there's just a different
notion of which one is primary.

(The reason a composite type has to have a pg_class entry is that
it has pg_attribute entries, and those have to have something in
pg_class for their attrelid to link to.)

regards, tom lane

#7Gevik Babakhani
pgdev@xs4all.nl
In reply to: Andrew Dunstan (#4)
Re: pg_class and enum types

Andrew Dunstan wrote:

Gevik Babakhani wrote:

I was wondering why there is no pg_class record for the enum types.
Do we treat the enum types differently?

Why do you think we should? What would the record look like?

cheers

andrew

I am not implying whether we should or we should not. I was just
looking for the logic behind it.
Re-reading what I just wrote with your reply gives me hint.

Thanx.

--
Regards,
Gevik

#8Gevik Babakhani
pgdev@xs4all.nl
In reply to: Tom Lane (#6)
Re: pg_class and enum types

Tom Lane wrote:

Andrew Dunstan <andrew@dunslane.net> writes:

Gevik Babakhani wrote:

select * from pg_class where relname='test_type'

It's not so much that enum types are handled specially, but that
composite types are. :-)

Relations (tables) have always had both pg_class and pg_type entries.
The pg_class entry denotes the relation proper, the pg_type entry
denotes the relation's rowtype.

Composite types have the same two entries, there's just a different
notion of which one is primary.

(The reason a composite type has to have a pg_class entry is that
it has pg_attribute entries, and those have to have something in
pg_class for their attrelid to link to.)

regards, tom lane

Thank you :)

--
Regards,
Gevik