Each time you create a table in PostgreSQL, a new data type represented by
that table is created and added to the pg_type
table. According to the
Postgres docs:
CREATE TABLE also automatically creates a data type that represents the composite type corresponding to one row of the table. Therefore, tables cannot have the same name as any existing data type in the same schema.
For instance, if you create a users
table like so:
create table users (
id serial primary key,
first_name varchar not null,
last_name varchar not null
);
then the pg_type
will now contain an entry with a typname
of users
.
select * from pg_type where typname = 'users';
-[ RECORD 1 ]--+------------
typname | users
typnamespace | 2200
typowner | 16384
...
h/t Bruce Momjian