CREATE TYPE
CREATE TYPE
defines a new data type.
Conceptual framework
CREATE TYPE
creates custom types, which let you create named versions of anonymous types. For more information, see SQL Data Types: Custom types.
Use
Currently, custom types provide a shorthand for referring to otherwise-annoying-to-type names.
Syntax
Field | Use |
---|---|
type_name | A name for the type. |
MAP / LIST | The data type. If not specified, a row type is assumed. |
property = val | A property of the new type. This is required when specifying a LIST or MAP type. Note that type properties can only refer to data types within the catalog, i.e. they cannot refer to anonymous list or map types. |
row
properties
Field | Use |
---|---|
field_name | The name of a field in a row type. |
field_type | The data type of a field indicated by field_name. |
list
properties
Field | Use |
---|---|
ELEMENT TYPE | Creates a custom list whose elements are of ELEMENT TYPE . |
map
properties
Field | Use |
---|---|
KEY TYPE | Creates a custom map whose keys are of KEY TYPE . KEY TYPE must resolve to text . |
VALUE TYPE | Creates a custom map whose values are of VALUE TYPE . |
Details
For details about the custom types CREATE TYPE
creates, see SQL Data Types: Custom types.
Properties
All custom type properties’ values must refer to named types, e.g. integer
.
To create a custom nested list
or map
, you must first create a custom list
or map
. This creates a named type, which can then be referred to in another custom type’s properties.
Examples
Custom list
CREATE TYPE int4_list AS LIST (ELEMENT TYPE = int4); SELECT '{1,2}'::int4_list::text AS custom_list;
custom_list ------------- {1,2}
Nested custom list
CREATE TYPE int4_list_list AS LIST (ELEMENT TYPE = int4_list); SELECT '{{1,2}}'::int4_list_list::text AS custom_nested_list;
custom_nested_list -------------------- {{1,2}}
Custom map
CREATE TYPE int4_map AS MAP (KEY TYPE = text, VALUE TYPE = int4); SELECT '{a=>1}'::int4_map::text AS custom_map;
custom_map ------------ {a=>1}
Nested custom map
CREATE TYPE int4_map_map AS MAP (KEY TYPE = text, VALUE TYPE = int4_map); SELECT '{a=>{a=>1}}'::int4_map_map::text AS custom_nested_map;
custom_nested_map ------------------- {a=>{a=>1}}
Custom row
type
CREATE TYPE row_type AS (a int, b text); SELECT ROW(1, 'a')::row_type as custom_row_type;
custom_row_type ----------------- (1,a)
Nested row
type
CREATE TYPE nested_row_type AS (a row_type, b float8); SELECT ROW(ROW(1, 'a'), 2.3)::nested_row_type AS custom_nested_row_type;
custom_nested_row_type ------------------------ ("(1,a)",2.3)
Privileges
The privileges required to execute this statement are:
CREATE
privileges on the containing schema.USAGE
privileges on all types used in the type definition.USAGE
privileges on the schemas that all types in the statement are contained in.