# Creating Custom Types

PostgreSQL has support for creating custom types. When you need something more expressive than the built-in types and you don't want your data spread across multiple columns, you can instead create a custom type.

```sql
create type dimensions as (
  width integer,
  height integer,
  depth integer
);
```

This new type can then be used in the definition of a new table

```sql
create table moving_boxes (
  id serial primary key,
  dims dimensions not null
);
```

and when inserting data

```sql
insert into moving_boxes (dims) values (row(3,4,5)::dimensions);
```

See the [`create type` docs](http://www.postgresql.org/docs/current/static/sql-createtype.html) for more details.
