Creating Custom Types in PostgreSQL
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.
create type dimensions as ( width integer, height integer, depth integer );
This new type can then be used in the definition of a new table
create table moving_boxes ( id serial primary key, dims dimensions not null );
and when inserting data
insert into moving_boxes (dims) values (row(3,4,5)::dimensions);