Карта / PostgreSQL / Типы и constraints

Типы и constraints

PostgreSQL — конкретная СУБД (система управления базами данных), реализующая стандарт SQL со своими типами данных. Самые частые:

CREATE TABLE users (
    id SERIAL PRIMARY KEY,            -- автоинкрементное целое число
    name VARCHAR(100) NOT NULL,        -- строка ограниченной длины
    bio TEXT,                            -- строка без ограничения длины
    age INT,                             -- целое число
    balance NUMERIC(10, 2),              -- точное дробное (для денег!)
    is_active BOOLEAN DEFAULT true,      -- да/нет
    created_at TIMESTAMP DEFAULT now()  -- дата и время
);

Ограничения (constraints — NOT NULL, UNIQUE, CHECK) подробно разобраны в теме «Ограничения на поля» — здесь то же самое, специфика PostgreSQL.

Копнуть глубже

Почему для денег используют NUMERIC, а не FLOAT/DOUBLE. Дробные типы с плавающей точкой неточны (та же причина, что и в Java — см. примечание про double/float в теме «Примитивные типы»). NUMERIC(10, 2) хранит точное число с фиксированным количеством знаков после запятой — для денег это критично, ошибка в копейках при миллионах операций накапливается в реальные деньги.

SERIAL под капотом — это INT плюс автоматически созданная последовательность (SEQUENCE), которая генерирует следующее число при каждой вставке. В современном PostgreSQL чаще используют GENERATED ALWAYS AS IDENTITY — более стандартный SQL-синтаксис с тем же эффектом.

🎤 Закрыл тему, если можешь объяснить:
• основные типы PostgreSQL и для чего каждый;
• почему для денег используют NUMERIC, а не FLOAT (если дошёл до 2-го слоя).