The Postgres type system can be
broken down in several ways. Types are divided into base types and
composite types. Base types are those, like int4, that are implemented in a language such as
C. They generally correspond to
what are often known as "abstract data types"; Postgres can only operate on such types
through methods provided by the user and only understands the
behavior of such types to the extent that the user describes them.
Composite types are created whenever the user creates a class. EMP
is an example of a composite type.

Postgres stores these types in
only one way (within the file that stores all instances of the
class) but the user can "look inside" at the attributes of these
types from the query language and optimize their retrieval by (for
example) defining indices on the attributes. Postgres base types are further divided into
built-in types and user-defined types. Built-in types (like
int4) are those that are compiled into the
system. User-defined types are those created by the user in the
manner to be described below.

Submit correction

If you see anything in the documentation that is not correct, does not match
your experience with the particular feature or requires further clarification,
please use
this form
to report a documentation issue.