Skip to content

Data Types

PostgreSQL has a rich set of native data types available to users. Users can add new types to PostgreSQL using the CREATE TYPE command.

https://www.postgresql.org/docs/9.6/static/datatype.html

|Name|Storage Size|Description|Range |---|---|---|---|---|---|--- |smallint|2 bytes|small-range integer|-32768 to +32767 |integer|4 bytes|ypical choice for integer|-2147483648 to +2147483647 |bigint|8 bytes|large-range integer|-9223372036854775808 to +9223372036854775807 |decimal|variable|user-specified precision, exact|up to 131072 digits before the decimal point; up to 16383 digits after the decimal point |numeric|variable|user-specified precision, exact|up to 131072 digits before the decimal point; up to 16383 digits after the decimal point |real|4 bytes|variable-precision, inexact|6 decimal digits precision |double precision|8 bytes|variable-precision, inexact|15 decimal digits precision |smallserial|2 bytes|small autoincrementing integer|1 to 32767 |serial|4 bytes|autoincrementing integer|1 to 2147483647 |bigserial|8 bytes|large autoincrementing integer|1 to 9223372036854775807 |int4range||Range of integer| |int8range||Range of bigint| |numrange||Range of numeric|

|Name|Storage Size|Description|Low Value|High Value|Resolution |---|---|---|---|---|---|--- |timestamp (without time zone)|8 bytes|both date and time (no time zone)|4713 BC|294276 AD|1 microsecond / 14 digits |timestamp (with time zone)|8 bytes|both date and time, with time zone|4713 BC|294276 AD|1 microsecond / 14 digits |date|4 bytes|date (no time of day)|4713 BC|5874897 AD|1 day |time (without time zone)|8 bytes|time of day (no date)|00:00:00|24:00:00|1 microsecond / 14 digits |time (with time zone)|12 bytes|times of day only, with time zone|00:00:00+1459|24:00:00-1459|1 microsecond / 14 digits |interval|16 bytes|time interval|-178000000 years|178000000 years|1 microsecond / 14 digits |tsrange||range of timestamp without time zone||| |tstzrange||range of timestamp with time zone||| |daterange||range of date|||

|Name|Storage Size|Description|Representation |---|---|---|---|---|---|--- |point|16 bytes|Point on a plane|(x,y) |line|32 bytes|Infinite line|{A,B,C} |lseg|32 bytes|Finite line segment|((x1,y1),(x2,y2)) |box|32 bytes|Rectangular box|((x1,y1),(x2,y2)) |path|16+16n bytes|Closed path (similar to polygon)|((x1,y1),…) |path|16+16n bytes|Open path|[(x1,y1),…] |polygon|40+16n bytes|Polygon (similar to closed path)|((x1,y1),…) |circle|24 bytes|Circle|<(x,y),r> (center point and radius)

|Name|Storage Size|Description |---|---|---|---|---|---|--- |cidr|7 or 19 bytes|IPv4 and IPv6 networks |inet|7 or 19 bytes|IPv4 and IPv6 hosts and networks |macaddr|6 bytes|MAC addresses

|Name|Description |---|---|---|---|---|---|--- |character varying(n), varchar(n)|variable-length with limit |character(n), char(n)|fixed-length, blank padded |text|variable unlimited length

In PostgreSQL you can create Arrays of any built-in, user-defined or enum type. In default there is no limit to an Array, but you can specify it.

SELECT integer[];
SELECT integer[3];
SELECT integer[][];
SELECT integer[3][3];
SELECT integer ARRAY;
SELECT integer ARRAY[3];
SELECT '{0,1,2}';
SELECT '{{0,1},{1,2}}';
SELECT ARRAY[0,1,2];
SELECT ARRAY[ARRAY[0,1],ARRAY[1,2]];

By default PostgreSQL uses a one-based numbering convention for arrays, that is, an array of n elements starts with array[1] and ends with array[n].

--accesing a spefific element
WITH arr AS (SELECT ARRAY[0,1,2] int_arr) SELECT int_arr[1] FROM arr;
int_arr
---------
0
(1 row)
--sclicing an array
WITH arr AS (SELECT ARRAY[0,1,2] int_arr) SELECT int_arr[1:2] FROM arr;
int_arr
---------
{0,1}
(1 row)
--array dimensions (as text)
with arr as (select ARRAY[0,1,2] int_arr) select array_dims(int_arr) from arr;
array_dims
------------
[1:3]
(1 row)
--length of an array dimension
WITH arr AS (SELECT ARRAY[0,1,2] int_arr) SELECT array_length(int_arr,1) FROM arr;
array_length
--------------
3
(1 row)
--total number of elements across all dimensions
WITH arr AS (SELECT ARRAY[0,1,2] int_arr) SELECT cardinality(int_arr) FROM arr;
cardinality
-------------
3
(1 row)

will be added