При определении таблицы для всех ее столбцов необходимо указать тип данных. Тип данных определяет диапазон значений, которые могут храниться в столбце, сколько они будут занимать места в памяти. PostgreSQL поддерживает богатую палитру различных типов данных, среди которые условно можно разделить на подгруппы: числовые, символьные, логические, дата и время, бинарные и ряд других.
serial: представляет автоинкрементирующееся числовое значение, которое занимает 4 байта и может хранить числа от 1 до 2147483647. Значение данного типа образуется путем автоинкремента значения предыдущей строки. Поэтому, как правило, данный тип используется для определения идентификаторов строки.
smallserial: представляет автоинкрементирующееся числовое значение, которое занимает 2 байта и может хранить
числа от 1 до 32767. Аналог типа serial
для небольших чисел.
bigserial: представляет автоинкрементирующееся числовое значение, которое занимает 8 байт и может хранить
числа от 1 до 9223372036854775807. Аналог типа serial
для больших чисел.
smallint: хранит числа от -32768 до +32767. Занимает 2 байта. Имеет псевдоним int2.
integer: хранит числа от -2147483648 до +2147483647. Занимает 4 байта. Имеет псевдонимы int и int4.
bigint: хранит числа от -9223372036854775808 до +9223372036854775807. Занимает 8 байт. Имеет псевдоним int8.
numeric: хранит числа с фиксированной точностью, которые могут иметь до 131072 знаков в целой части и до 16383 знаков после запятой.
Данный тип может принимать два параметра precision и scale: numeric(precision, scale)
.
Параметр precision
указывает на максимальное количество цифр, которые может хранить число.
Параметр scale
представляет максимальное количество цифр, которые может содержать число после запятой. Это значение должно находиться в диапазоне от 0 до значения параметра precision. По умолчанию оно равно 0.
Например, для числа 23.5141
precision равно 6, а scale - 4.
decimal: хранит числа с фиксированной точностью, которые могут иметь до 131072 знаков в целой части и до 16383 знаков
в дробной части. То же самое, что и numeric
.
real: хранит числа с плавающей точкой из диапазона от 1E-37 до 1E+37. Занимает 4 байта. Имеет псевдоним
float4
.
double precision: хранит числа с плавающей точкой из диапазона от 1E-307 до 1E+308. Занимает 8 байт. Имеет псевдоним
float8
.
Примеры использования:
Id SERIAL, TotalWeight NUMERIC(9,2), Age INTEGER, Surplus REAL
Для работы с денежными единицами определен тип money, который может принимать значения в диапазоне от -92233720368547758.08 до +92233720368547758.07 и занимает 8 байт.
character(n): представляет строку из фиксированного количества символов. С помощью параметра задается задается количество символов в строке. Имеет псевдоним char(n).
character varying(n): представляет строку из переменной длины. С помощью параметра задается задается максимальное количество символов в строке. Имеет псевдоним varchar(n).
text: представляет текст произвольной длины.
Для хранения бинарных данных определен тип bytea. Он хранит данные в виде бинарных строк, которые представляют последовательность октетов или байт.
timestamp: хранит дату и время. Занимает 8 байт. Для дат самое нижнее значение - 4713 г до н.э., самое верхнее значение - 294276 г н.э.
timestamp with time zone: то же самое, что и timestamp
, только добавляет данные о часовом поясе.
date: представляет дату от 4713 г. до н.э. до 5874897 г н.э. Занимает 4 байта.
time: хранит время с точностью до 1 микросекунды без указания часового пояса. Принимает значения от 00:00:00 до 24:00:00. Занимает 8 байт.
time with time zone: хранит время с точностью до 1 микросекунды с указанием часового пояса. Принимает значения от 00:00:00+1459 до 24:00:00-1459. Занимает 12 байт.
interval: представляет временной интервал. Занимает 16 байт.
Распространенные форматы дат:
yyyy-mm-dd
- 1999-01-08
Month dd, yyyy
- January 8, 1999
mm/dd/yyyy
- 1/8/1999
Распространенные форматы времени:
hh:mi
- 13:21
hh:mi am/pm
- 1:21 pm
hh:mi:ss
- 1:21:34
Тип boolean может хранить одно из двух значений: true или false.
Вместо true
можно указывать следующие значения: TRUE, 't', 'true', 'y', 'yes', 'on', '1'.
Вместо false
можно указывать следующие значения: FALSE, 'f', 'false', 'n', 'no', 'off', '0'.
cidr: интернет-адрес в формате IPv4 и IPv6. Например, 192.168.0.1
. Занимает от 7 до 19 байт.
inet: интернет-адрес в формате cidr/y
, где cidr
это адрес в формате IPv4 или IPv6, а /y
-
количество бит в адресе (если этот параметр не указан, то используется 34 для IPv4, 128 для IPv6). Например, 192.168.0.1/24
или 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128
. Занимает от 7 до 19 байт.
macaddr: хранит MAC-адрес. Занимает 6 байт.
macaddr8: хранит MAC-адрес в формате EUI-64. Занимает 8 байт.
point: представляет точку на плоскости в формате (x,y)
. Занимает 16 байт.
line: представляет линию неопределенной длины в формате {A,B,C}
. Занимает 32 байта.
lseg: представляет отрезок в формате ((x1,y1),(x2,y2))
. Занимает 32 байта.
box: представляет прямоугольник в формате ((x1,y1),(x2,y2))
. Занимает 32 байта.
path: представляет набор содиненных точек. В формате ((x1,y1),...)
путь является закрытым (первая и последняя точка соединяются линией)
и фактически представляет многоугольник. В формате [(x1,y1),...]
путь является открытым Занимает 16+16n байт.
polygon: представляет многоугольник в формате ((x1,y1),...)
. Занимает 40+16n байт.
circle: представляет окружность в формате <(x,y),r>
. Занимает 24 байта.
json: хранит данные json в текстовом виде.
jsonb: хранит данные json в бинарном формате.
uuid: хранит универсальный уникальный идентификатор (UUID), например, a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
. Занимает 32 байта.
xml: хранит даные в формате XML.