Какие основные типы данных поддерживает PostgreSQL?
PostgreSQL обладает одной из самых богатых систем типов данных среди всех СУБД, включая числовые, строковые, временные, а также специализированные типы вроде UUID, JSONB и массивов.
Числовые типы
| Тип | Размер | Диапазон |
|---|---|---|
smallint |
2 байта | -32768 до +32767 |
integer |
4 байта | -2147483648 до +2147483647 |
bigint |
8 байт | -9223372036854775808 до +9223372036854775807 |
decimal/numeric |
переменный | до 131072 цифр до точки, до 16383 после |
real |
4 байта | 6 значащих цифр |
double precision |
8 байт | 15 значащих цифр |
Для финансовых расчётов всегда используют numeric — он обеспечивает точные вычисления без ошибок округления, в отличие от real и double precision.
Символьные типы
char(n)— строка фиксированной длины, дополняется пробеламиvarchar(n)— строка переменной длины с ограничениемtext— строка произвольной длины (без ограничения)
В PostgreSQL varchar без указания длины и text абсолютно идентичны по производительности. Рекомендуется использовать text, а ограничения длины делать через CHECK-constraints.
Дата и время
date— только дата (4 байта)time— только время (8 байт)timestamp— дата и время без часового поясаtimestamptz(timestamp with time zone) — дата и время с часовым поясомinterval— интервал времени
Пример
-- Рекомендуется всегда использовать timestamptz
CREATE TABLE transactions (
id bigserial PRIMARY KEY,
amount numeric(15, 2) NOT NULL,
created_at timestamptz DEFAULT now()
);
Прочие типы
boolean—true,false,nulluuid— 128-битный универсальный уникальный идентификатор; для генерации используетсяgen_random_uuid()(с PostgreSQL 13) или расширениеuuid-osspjson/jsonb— хранение JSON-данных (текстовое и бинарное представление)- Массивы — любой тип данных может быть массивом:
integer[],text[] - Serial типы —
serial,bigserial,smallserial(автоинкрементные псевдотипы)
Начиная с PostgreSQL 10 рекомендуется использовать стандартный GENERATED ALWAYS AS IDENTITY вместо serial.
Пример
CREATE TABLE clients (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name text NOT NULL
);
На собеседовании: ключевые моменты —
numericдля денег (неdouble),timestamptzвместоtimestamp,textвместоvarchar, иGENERATED ALWAYS AS IDENTITYвместоserial. Это показывает знание лучших практик, а не просто перечисление типов.