Основные типы данных в PostgreSQL

Содержание

Целочисленные типы

smallint или int2

2 байта, целое со знаком с допустимыми значениями от -32768 до +32767.

integer, int или int4

4 байта, целое со знаком с допустимыми значениями от -2147483648 до +2147483647.

bigint или int8

8 байт, целое со знаком с допустимыми значениями от -9223372036854775808 до 9223372036854775807.

smallserial или serial2

2 байта с автоинкрементом, преобразуется в тип smallint и последовательность следующим образом:

CREATE SEQUENCE имя_таблицы_имя_столбца_seq AS smallint;
CREATE TABLE имя_таблицы (
    имя_столбца smallint NOT NULL DEFAULT nextval('имя_таблицы_имя_столбца_seq')
);
ALTER SEQUENCE имя_таблицы_имя_столбца_seq OWNED BY имя_таблицы.имя_столбца;

serial или serial4

4 байта с автоинкрементом, преобразуется в тип integer и последовательность следующим образом:

CREATE SEQUENCE имя_таблицы_имя_столбца_seq AS integer;
CREATE TABLE имя_таблицы (
    имя_столбца integer NOT NULL DEFAULT nextval('имя_таблицы_имя_столбца_seq')
);
ALTER SEQUENCE имя_таблицы_имя_столбца_seq OWNED BY имя_таблицы.имя_столбца;

bigserial или serial8

8 байт с автоинкрементом, преобразуется в тип bigint и последовательность следующим образом:

CREATE SEQUENCE имятаблицыимястолбцаseq AS bigint; CREATE TABLE имятаблицы ( имястолбца bigint NOT NULL DEFAULT nextval('имятаблицыимястолбцаseq') ); ALTER SEQUENCE имятаблицыимястолбцаseq OWNED BY имятаблицы.имястолбца;

Типы с фиксированной запятой

decimal или numeric

В скобках указывается точность M и количество знаков после запятой D. Значение M может быть не больше 1000. Если D не указано, то по умолчанию оно равно 0. Если M и D не указаны, то число сохраняется с максимальной точностью, но не более 131072 цифр до десятичной точки и не более 16383 — после.

При сохранении на диске поле занимает 3-8 байт + по два байта для каждых четырёх цифр.

Определены константа 'NaN' - "не число", которую при присвоении нужно указывать в одинарных кавычках.

Типы с плавающей запятой

real

4 байта, число с плавающей запятой в формате IEEE 754, от 1E-37 до 1E+37 с точностью не меньше 6 десятичных цифр.

В скобках указывается точность M и количество знаков после запятой D. Если D не указано, то по умолчанию оно равно 0.

double precision

8 байт, число с плавающей запятой в формате IEEE 754, от 1E-307 до 1E+308 и с точностью не меньше 15 цифр.

В скобках указывается точность M и количество знаков после запятой D. Если D не указано, то по умолчанию оно равно 0.

float(p)

При p от 1 до 24 - real, при p от 25 до 53 - double precision.

Определены константы 'NaN' - "не число", '-Infinity' - "минус бесконечность" и '+Infinity' - "плюс бесконечность", которые при присвоении нужно указывать в одинарных кавычках.

Типы для дат и времени

timestamp или timestamp without time zone

8 байт, дата и время. Допустимые значения - от 4713 до н. э. до 294276 н. э. с шагом в 1 микросекунду без часового пояса.

Точность после запятой можно ограничить, указав в скобках после объявления типа количество сохраняемых знаков от 0 до 6.

timestamp with time zone или timestamptz

8 байт, дата и время. Допустимые значения - от 4713 до н. э. до 294276 н. э. с шагом в 1 микросекунду с часовым поясом.

Точность после запятой можно ограничить, указав в скобках после объявления типа количество сохраняемых знаков от 0 до 6.

date

4 байта, дата без времени суток. Допустимые значения - от 4713 до н. э. до 5874897 н. э. с шагом в 1 сутки.

Точность после запятой можно ограничить, указав в скобках после объявления типа количество сохраняемых знаков от 0 до 6.

time или timestamp without time zone

8 байт, время суток без даты. Допустимые значения - от 00:00:00 до 24:00:00 с шагом в 1 микросекунду без часового пояса.

Точность после запятой можно ограничить, указав в скобках после объявления типа количество сохраняемых знаков от 0 до 6.

time with time zone

12 байт, время суток без даты. Допустимые значения - от 00:00:00 до 24:00:00 с шагом в 1 микросекунду с часовым поясом.

Точность после запятой можно ограничить, указав в скобках после объявления типа количество сохраняемых знаков от 0 до 6.

interval

16 байт, временной интервал. Допустимые значения - от -178000000 лет до 178000000 лет с шагом в 1 микросекунду.

Точность после запятой можно ограничить, указав в скобках после объявления типа количество сохраняемых знаков от 0 до 6.

Двоичные типы

bytea

1 или 4 байта + сама последовательность байт.

Присваивать можно значения одного из двух типов:

  • Шестнадцатеричные последовательности вида '\xDEADBEEF' или '\xdE Ad be EF' (пробелы допускаются только между парами сиволов, образующих байт),
  • Специальная последовательность, похожая на обычные строки, в которых символ обратной косой черты и апострофа можно указать, удвоив их, а прочие значения указываются в виде косой черты со следющими за ними тремя восьмеричными цифрами. Например: \000abc\\''.

Текстовые типы

character или char

1 или 4 байта + сама строка. Строка фиксированной длины. Максимальное количество символов указывается в скобках после типа, может принимать значения от 1 до 10485760. При сохранении более коротких строк, они дополняются до необходимой длины пробелами справа.

character varying или varchar

1 или 4 байта + сама строка. Строка переменной длины. Максимальное количество символов указывается в скобках после типа, может принимать значения от 1 до 10485760. При сохранении более длинных строк пробелы справа обрезаются так, чтобы оставшаяся строка не превышала максимального количества символов (в соотсетствии со стандартом SQL). Если максимальное количество символов не указано, то может храниться строка максимальным объёмом до 1 гигабайта.

text

1 или 4 байта + сама строка. Тип для хранения строк произвольной длины максимальным объёмом до 1 гигабайта.

Другие типы

bit

5 или 8 байт плюс по 1 байту на каждые 8 бит. Последовательность бит фиксированной длины M, которая указывается после типа в круглых скобках, по умолчанию - 1. Вместе с этим типом удобно использовать значения вида b'101'. Если попытаться присвоить строку бит другой длины, произойдёт ошибка.

bit varying или varbit

5 или 8 байт плюс по 1 байту на каждые 8 бит. Последовательность бит максимальной длины M, которая указывается после типа в круглых скобках, по умолчанию не ограничена. Вместе с этим типом удобно использовать значения вида b'101'. При попытке присвоить битовую строку короче максимальной длины, она будет дополнена нулями справа. При попытке присвоить битовую строку длиннее максимальной произойдёт ошибка.

boolean

1 байт, допутимые значения:

  • true, yes, on, 1, t, y - истина,
  • false, no, off, 0, f, n - ложь.

ENUM

Для создания перечисляемых типов предусмотрены выражения следующего вида:

CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');

После чего созданный тип mood можно использовать при определении полей таблиц. Значения занимают 4 байта на диске, поддаются сравнению и сортировке, соотвествующим порядку их определения в типе. То есть в примере выше 'happy' > 'ok' и при сортировке значения 'sad' будут в начале списка, а значения 'happy' - в конце.

Использованные материалы