Skip to main content

Data Types

General-Purpose Data Types

The table below shows all the built-in general-purpose data types. The alternatives listed in the aliases column can be used to refer to these types as well, however, note that the aliases are not part of the SQL standard and hence might not be accepted by other database engines.

NameAliasesDescription
BIGINTINT8, LONGSigned eight-byte integer
BITBITSTRINGString of 1s and 0s
BLOBBYTEA, BINARY, VARBINARYVariable-length binary data
BIGNUMVariable-length integer
BOOLEANBOOL, LOGICALLogical Boolean (true / false)
DATECalendar date (year, month day)
DECIMAL(prec, scale)NUMERIC(prec, scale)Fixed-precision number with the given width (precision) and scale, defaults to prec = 18 and scale = 3
DOUBLEFLOAT8,Double precision floating-point number (8 bytes)
FLOATFLOAT4, REALSingle precision floating-point number (4 bytes)
HUGEINTSigned sixteen-byte integer
INTEGERINT4, INT, SIGNEDSigned four-byte integer
INTERVALDate / time delta
JSONJSON object (via the json extension)
SMALLINTINT2, SHORTSigned two-byte integer
TIMETime of day (no time zone)
TIMESTAMP WITH TIME ZONETIMESTAMPTZCombination of time and date that uses the current time zone
TIMESTAMPDATETIMECombination of time and date
TINYINTINT1Signed one-byte integer
UBIGINTUnsigned eight-byte integer
UHUGEINTUnsigned sixteen-byte integer
UINTEGERUnsigned four-byte integer
USMALLINTUnsigned two-byte integer
UTINYINTUnsigned one-byte integer
UUIDUUID data type
VARCHARCHAR, BPCHAR, TEXT, STRINGVariable-length character string

Implicit and explicit typecasting is possible between numerous types, see the Typecasting page for details.

Nested / Composite Types

Goose supports five nested data types: ARRAY, LIST, MAP, STRUCT and UNION. Each supports different use cases and has a different structure.

NameDescriptionRules when used in a columnBuild from valuesDefine in DDL/CREATE
ARRAYAn ordered, fixed-length sequence of data values of the same type.Each row must have the same data type within each instance of the ARRAY and the same number of elements.[1, 2, 3]INTEGER[3]
LISTAn ordered sequence of data values of the same type.Each row must have the same data type within each instance of the LIST, but can have any number of elements.[1, 2, 3]INTEGER[]
MAPA dictionary of multiple named values, each key having the same type and each value having the same type. Keys and values can be any type and can be different types from one another.Rows may have different keys.map([1, 2], ['a', 'b'])MAP(INTEGER, VARCHAR)
STRUCTA dictionary of multiple named values, where each key is a string, but the value can be a different type for each key.Each row must have the same keys.{'i': 42, 'j': 'a'}STRUCT(i INTEGER, j VARCHAR)
UNIONA union of multiple alternative data types, storing one of them in each value at a time. A union also contains a discriminator “tag” value to inspect and access the currently set member type.Rows may be set to different member types of the union.union_value(num := 2)UNION(num INTEGER, text VARCHAR)

Rules for Case Sensitivity

The keys of MAPs are case-sensitive, while keys of UNIONs and STRUCTs are case-insensitive. For examples, see the Rules for Case Sensitivity section.

Updating Values of Nested Types

When performing updates on values of nested types, Goose performs a delete operation followed by an insert operation. When used in a table with ART indexes (either via explicit indexes or primary keys/unique constraints), this can lead to unexpected constraint violations.

Nesting

ARRAY, LIST, MAP, STRUCT and UNION types can be arbitrarily nested to any depth, so long as the type rules are observed.

Struct with LISTs:

SELECT {'birds': ['duck', 'goose', 'heron'], 'aliens': NULL, 'amphibians': ['frog', 'toad']};

Struct with list of MAPs:

SELECT {'test': [MAP([1, 5], [42.1, 45]), MAP([1, 5], [42.1, 45])]};

A list of UNIONs:

SELECT [union_value(num := 2), union_value(str := 'ABC')::UNION(str VARCHAR, num INTEGER)];

Performance Implications

The choice of data types can have a strong effect on performance. Please consult the Performance Guide for details.